「.NETのパフォーマンスの最適化」 - 第V章ジェネリック

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/zhonghua_csdn/article/details/90653006

ジェネリック医薬品は、新しい.NET Framework2.0、名前空間System.Collections.Genericの特徴は、いくつかの新しいジェネリックベースのコレクションクラスが含まれています。

ジェネリック型の安全性およびパッキング問題を解決します。

  • 型の安全性:操作の一般的なタイプの検証データは、それが明示的にコンパイル時に実行時に間違って行くことができる行動を禁止されています。
  • パラメータは、基準オブジェクトである場合、ボックス化値型を回避します。
    例えば:
ArrayList emp = new ArrayList(7);
emp.add("hello");
emp.add("world");
emp.add(32);

上記のコードは、リストのような、異なるタイプのデータだけでなく、追加されます。あなたは、一般的なリストを使用する場合は、<T>似たような状況ではありません。安全であるジェネリックコレクションを入力し、それが記憶素子が許可されていない一致していない、と値型をボックス化しません。
あなたは、あなたのリストのデータ型にバインドされているリスト<string>を定義する場合、例えば、次のようになります。


2789632-72b174864197c5f9.png

2789632-ae4d9c339e344b39.png

一般的な制約

2789632-f34eca8f0bfdbc59.png

参考: C#ジェネリック制約 -パークブログ-ゆうウェンの木ができ
、ジェネリック型の数から体系的にジェネリックを使用して、このような一般的なデリゲートの定義として一般的な方法を、あなたはまた、ジェネリック医薬品の使用をカスタマイズすることができます。

デモ

私たちは、少しのデモを行った非ジェネリックメソッドと、次の一般的なクラスを使用して、非ジェネリックメソッドのジェネリッククラスを使用して、非ジェネリックメソッドとジェネリックメソッドです。
コード:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GenericTest
{
    class Program
    {
        static void Main(string[] args)
        {
            GenericClass<int> class1 = new GenericClass<int>();
            class1.Say();
            class1.Say(8);

            GenericClass2 class2 = new GenericClass2();
            class2.Say();
            class2.Say<int>(8);

            Console.ReadLine();

        }
    }

}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GenericTest
{
    public class GenericClass<T>
    {
        public void Say()
        {
            // do nothing
        }

        public void Say(T t1)
        {
            Console.WriteLine($"{t1}");
        }
    }

    public class GenericClass2
    {
        public void Say()
        {
            // do nothing
        }

        public void Say<T>(T t1)
        {
            Console.WriteLine($"{t1}");
        }
    }
}

結果:


2789632-52a6c06963324613.png

2789632-4d77039bb2409e81.png

2789632-f7a4928d51a8bfd0.png

おすすめ

転載: blog.csdn.net/zhonghua_csdn/article/details/90653006