2012-03-23 5 views
1

可能性の重複:タイトルのように
What does new() mean?C#での継承、T:new()の意味は?

。私はコード内でこの構文が何を意味しているのだろうか。私はいくつかのサンプルでそれを見つけましたが、説明されていませんでした。

public class SomeClass<T> where T: new() // what does it mean? 

誰でも私のためにそれを説明できますか?

答えて

6

おそらく、あなたはこれらの行に沿って何かを見たということですか?あなたが唯一の公共パラメータなしのコンストラクタを持つタイプTとジェネリッククラスを使用することができることを意味し

public class SomeClass<T> where T: new() 
{...} 

。これらはgeneric type constraintsと呼ばれます。なぜあなたはそのような制約が必要になる

// causes CS0310 because XmlWriter cannot be instantiated with paraless ctor 
var someClass = new SomeClass<XmlWriter>(); 

// causes same compile error for same reason 
var someClass = new SomeClass<string>(); 

:つまり、あなたはこれを(CS0310を参照)を行うことはできませんか?たとえば、Tという新しい変数をインスタンス化するとします。この制約がある場合にのみこれを行うことができます。そうでないと、コンパイラーはインスタンス化が機能するかどうかを事前に知ることができません。すなわち:

public class SomeClass<T> where T: new() 
{ 
    public static T CreateNewT() 
    { 
     // you can only write "new T()" when you also have "where T: new()" 
     return new T(); 
    } 
} 
+1

thats回答ありがとう:)今すぐeverythink clear :) – harry180

+0

'new SomeClass ()'は、 'string'にパラメータのないコンストラクタがないため、エラー(「投げない」)を引き起こします。 – svick

+0

@スヴィック:それはまさに私が意味していた、私は "スロー"を削除します。 CS0310はコンパイル時エラーです。原因は私のテキストの中にすでにありました。 – Abel

3

これは公開パラメータなしのコンストラクタを持たなければならないジェネリック型を意味し、generic type constraintです。

あなたのコード例はコンパイルされません。

正しい構文は次のとおりです。

SomeClass<T> where T : new() 
1

それがコンパイルされませんので、あなたは、コードのフルラインを投稿していないが、それはジェネリックで制約です。 HereはMSDNの記事です。