web-dev-qa-db-ja.com

.Net(C#/ VB.NET)でのジェネリックの使用例

C#/ VB.NETでジェネリックを使用する例と、ジェネリックを使用する理由は何ですか?

29
Seenu

例1:トリプルクラスを作成する

Class Triple<T1, T2, T3>
{
   T1 _first;
   T2 _second;
   T3 _Third;
}

例2:特定のデータ型の列挙値を解析するヘルパークラス

static public class EnumHelper<T>
{
   static public T Parse(string value)
   {
       return (T)Enum.Parse(typeof(T), value);
   }
}
7
Brijesh Mishra

ジェネリックの一般的で非常に役立つ1つの使用法は、強く型付けされたコレクションクラスです。従来、すべてのコレクションクラスにはオブジェクトを渡す必要があり、照会するとオブジェクトを返す必要がありました。すべての型変換を自分で処理する必要がありました。ジェネリックを使用すると、その必要はありません。 List(Of Integer)を持つことができ、そこから値を要求すると、整数が取得されます。整数に変換する必要のあるオブジェクトは取得しません。

4
Instance Hunter
    private void button1_Click_1(object sender, RoutedEventArgs e)
    {
        TextValue<string, int> foo = new TextValue<string, int>("",0);
        foo.Text = "Hi there";
        foo.Value = 3995;
        MessageBox.Show(foo.Text);
    }

    class TextValue<TText, TValue>
    {
        public TextValue(TText text, TValue value)
        {
            Text = text;
            Value = value;
        }
        public TText Text { get; set; }
        public TValue Value { get; set; }
    }
3
dewelloper

ジェネリックの最も一般的な理由と使用例は、前述のMSDNドキュメントで説明されています。追加したいジェネリックの利点の1つは、開発プロセスでのツールサポートを強化できることです。 Visual StudioやReSharperに統合されているようなリファクタリングツールは、コーディング中の支援を提供するために静的型分析に依存しています。ジェネリックは通常、オブジェクトモデルにより多くの型情報を追加するため、そのようなツールが分析し、コーディングを支援するための情報がより多くあります。

概念レベルでは、ジェネリックは、アプリケーションドメインとは別に「横断的な」懸念を解決するのに役立ちます。金融アプリケーションを開発しているのか、書店を開発しているのかに関係なく、遅かれ早かれ、物事のコレクションを維持する必要があります。そのようなコレクションの実装は、通常、それらのコレクションで維持されるものについてほとんど何も知らない必要があります。したがって、.NETフレームワークに同梱されている一般的なコレクションは、一般的なユースケースの主な例です。

3
Sven Künzler

基本的な例は次のとおりです。

class Other{
 class Generic<T>
{
  void met1(T x);
}
static void Main()
{
  Generic<int> g = new Generic<int>();
  Generic<string> s = new Generic<string>();
}
}
1
user544079
    private void button1_Click_1(object sender, RoutedEventArgs e)
    {
        TextValue<string, int> foo;
        List<TextValue<string, int>> listTextValue = new List<TextValue<string, int>>();
        for (int k = 0; k < 5; ++k)
        {
            foo = new TextValue<string, int>("",0);
            foo.Text = k.ToString();
            foo.Value = k;
            listTextValue.Add(foo);
            otherList.
            MessageBox.Show(foo.Text);
        }

    }

    class TextValue<TText, TValue>
    {
        public TextValue(TText text, TValue value){Text = text; Value = value;}
        public TText Text { get; set; }
        public TValue Value { get; set; }
    }
0
dewelloper