私はこのコード例を見て、new()
制約の目的が何であるか疑問に思っていました:
public class Client<T> : IClient where T : IClientFactory, new()
{
public Client(int UserID){ }
}
私はこのコード例を見て、new()
制約の目的が何であるか疑問に思っていました:
public class Client<T> : IClient where T : IClientFactory, new()
{
public Client(int UserID){ }
}
それは「「新しい」制約」と呼ばれます。 ここにドキュメントがあります。
新しい制約は、ジェネリック クラス宣言内のすべての型引数がパブリック パラメーターなしのコンストラクターを持たなければならないことを指定します。新しい制約を使用するには、型を抽象にすることはできません。
(私のものを強調)
基本的にT
、クラスのどこかに新しいものを作成するときはいつでも、コンパイラが新しいインスタンスを作成できるものだけを渡すことができるようにするために必要です。
Client
はT
オブジェクトのコレクションであり、これらのT
オブジェクトはインターフェイスを実装し、IClientFactory
パラメーターなしのパブリック コンストラクターを持っている必要があります。
new() の意味
型引数には、パラメーターなしのパブリック コンストラクターが必要です。他の制約と一緒に使用する場合、 new() 制約は最後に指定する必要があります。
MSDN の一般的な制約を参照してください