2012-03-15 16 views
2
public TResponse ExecuteCustomMessage<TResponse>(IModbusMessage request) 
    where TResponse : IModbusMessage, new() 

上記の意味は?以前は何も見たことがありませんでしたが、私はC#で数年前からコーディングしていましたが...関数であるはずですが、これは何であるか分かりません<>とwhereとnew()最後に...C#の構文:ここで、TResponse、new()

+7

あなたがそこに見ることができますhttp://msdn.microsoft.com/en-us/library/512aeb7t.aspx – SLaks

+0

奇妙な獣... – Mehrdad

+0

のチェックこれを私はそれが程度だとは思いませんジェネリック医薬品。私はそれが型制約に関するものだと思う。まあ、 'TResponse'型は' IModbusMessage'のサブクラスでなければならず、何も引数を持たないコンストラクタが必要です。多くの場合、これはあなたのクラスに 'TResponse'の新しいオブジェクトを構築したいということです。 –

答えて

8

IModbusMessageインタフェースを実装し、パラメータのないコンストラクタを持つTResponseジェネリック型のconstraintです。 (インターフェース名)型引数があるか 指定されたインタフェースを実装しなければならない:T

。複数のインタフェース制約を指定できます。 制約インターフェイスは汎用でもあります。

T:new() type引数には、パブリックパラメータなしの コンストラクタが必要です。他の制約と組み合わせて使用​​する場合は、最後にnew()制約を指定する必要があります( )。

また、他の人も指摘しているように、私はジェネリックスのドキュメント(コメントのSLaksが指している)を読むことをお勧めします。

+1

あなたの答えを理解するためには、OPに必要な知識があるのか​​どうか疑問です。 – ChaosPandion

2

これは一般的な方法です。メソッドが動作できるオブジェクトの型またはファミリを指定します。 where句は、TReponseがIModbusMessageインターフェイスを実装する必要があり、新しいキーワードでインスタンス化できる必要があることを示す制約です。それが意味する何

4

TResponseIModbusMessage

new()は、デフォルトのパラメータなしのコンストラクタを提供するという意味のインターフェイスを実装するタイプのものであるべきです。

私はあなたがより良い程度Generics

関連する問題