C#における汎用制約(where)は何ですか?
2904 ワード
: 。
:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/generics/generic-classes
拘束
説明
T:構造
タイプパラメータは値タイプでなければなりません.
T:クラス
タイプパラメータは参照タイプでなければなりません.この点は、クラス、インタフェース、委任、配列タイプにも適用されます.
T:new()
タイプパラメータには、パラメータなしの共通構造関数が必要です.他のコンストレイントと一緒に使用する場合は、new()コンストレイントを最後に指定する必要があります.
T:
タイプパラメータは、指定したベースクラスまたは指定したベースクラスから派生する必要があります.
T:
タイプパラメータは、指定したインタフェースまたは実装指定したインタフェースでなければなりません.複数のインタフェースコンストレイントを指定できます.コンストレイントインタフェースは汎用であってもよい.
T:U
Tに提供されるタイプのパラメータは、Uに提供されるパラメータまたはUに提供されるパラメータから派生する必要がある.
T : Access Access
public class BaseAccess where T : Access
{
}
T :T
public class BaseAccess where T : IAggregateRoot
{
}
public class BaseAccess where T : class
{
}
public class BaseAccess where T : struct
{
}
public class BaseAccess where T : new()
{
MongoContextAdapter _context;
public BaseAccess(MongoContextAdapter context)
{
this._context = context;
}
}
,
public class BaseAccess where T : class,new()
{
}
K
V
public class BaseAccess
where K : class,new()
where V : struct
{
}
/// K V K,V ,
public class BaseAccess
where K : V
where K : class,new()
where V : class,new()
{
}
T : Access Access
public class BaseAccess where T : Access
{
}
T :T
public class BaseAccess where T : IAggregateRoot
{
}
public class BaseAccess where T : class
{
}
public class BaseAccess where T : struct
{
}
public class BaseAccess where T : new()
{
MongoContextAdapter _context;
public BaseAccess(MongoContextAdapter context)
{
this._context = context;
}
}
,
public class BaseAccess where T : class,new()
{
}
K
V
public class BaseAccess
where K : class,new()
where V : struct
{
}
/// K V K,V ,
public class BaseAccess
where K : V
where K : class,new()
where V : class,new()
{
}