汎用クラスの定義と制約

1798 ワード

--public void Delete<T>(List<T>Entity List)where T:class,new()の使い方


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -
 - - - - - - - - - - - - - - - - - - - - - - - - - 
public class className where T : class, new(){...}//汎用クラスを定義し、Tがクラス(class)である必要があり、無パラメトリックコンストラクタが必要であることを制限します.
すなわち,Tはクラス(class)タイプでなければならず,構造(structure)タイプではない.これはタイプパラメータコンストレイントです.NETがサポートするタイプパラメータ制約には、where T:struct|Tが構造タイプwhere Tである必要があります:class where T:new()|Tは無パラメトリックコンストラクション関数where T:NameOfBaseClass|TはNameOfBaseClassというクラスwhere T:NameOfInterface|TはNameOfInterfaceというインタフェースを実装する必要があります
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 Assemble<T> , T 。
public class Assemble<T> where T:new()
{
	public string SayHello<T> (T object)
	{
		T ass=new T();
		return ass.ToString();
	}
}

public class legal
{
	 public legal(){}
}

public class notlegal
{
	public notlegal(string someting)
	{}
}

 Assemble<legal> ass=new Assemble<legal>(); Assemble<T>, T legal。 Assemble<notlegal> ass=new Assemble<notlegal>(); , Assemble<T> T , , 。