汎用型におけるnew()制約の使い方
1107 ワード
一、NETでサポートされているタイプのパラメータ制約には、次のものがあります.
where T:struct Tは構造タイプでなければなりませんwhere T:class Tはクラスタイプでなければなりません.Structure(structure)タイプではありませんwhere T:new()T無パラメトリック関数where T:NameOfBaseClass T NameOfBaseClassというクラスwhere T:NameOfInterface TはNameOfInterfaceというインタフェースを実装する必要があります
二、汎用型におけるnew()制約の基本形式
class A where T : new()
三、汎用型におけるnew()制約の例
1、汎用定義にnew()制約キーワードがある場合は、共通の無参の構造関数が必要であることを示します.簡単に言えば、Tの代わりにクラスを渡すとき、このクラスには構造関数があり、共通の無参でなければなりません.
2、複数の制約がある場合、new()キーワードは座席の後ろに置かなければならない.
3、new()コンストレイントを使用する場合、この非パラメトリックコンストラクション関数を呼び出すことでオブジェクトを作成できます.
五、複数の汎用型パラメータ
複数のタイプのパラメータの場合、各タイプのパラメータにはwhere句が使用されます.
一、NETでサポートされているタイプのパラメータ制約には、次のものがあります.
where T:struct Tは構造タイプでなければなりませんwhere T:class Tはクラスタイプでなければなりません.Structure(structure)タイプではありませんwhere T:new()T無パラメトリック関数where T:NameOfBaseClass T NameOfBaseClassというクラスwhere T:NameOfInterface TはNameOfInterfaceというインタフェースを実装する必要があります
二、汎用型におけるnew()制約の基本形式
class A where T : new()
三、汎用型におけるnew()制約の例
public class A where :class,new()
{
public void Func()
{
T t=new T();
}
}
四、汎用型におけるnew()制約の注意事項1、汎用定義にnew()制約キーワードがある場合は、共通の無参の構造関数が必要であることを示します.簡単に言えば、Tの代わりにクラスを渡すとき、このクラスには構造関数があり、共通の無参でなければなりません.
2、複数の制約がある場合、new()キーワードは座席の後ろに置かなければならない.
3、new()コンストレイントを使用する場合、この非パラメトリックコンストラクション関数を呼び出すことでオブジェクトを作成できます.
五、複数の汎用型パラメータ
複数のタイプのパラメータの場合、各タイプのパラメータにはwhere句が使用されます.
class Dictionary
where TKey : IComparable, IEnumerable,new()
where TVal : IMyInterface,new()
{
public void Add(TKey key, TVal val)
{
}
}
文章転載自:汎用中new()制約http://www.studyofnet.com/news/988.html