2010-12-13 7 views
1
public static T Get<T>() where T : class 
{ 
    string implName = Program.Settings[typeof(T).Name].ToString(); 
    object concrete = Activator.CreateInstance(Type.GetType(implName)); 

    return (T)concrete; 
} 

ここで、Tは何を意味するのですか?c#help help - > Getは何を意味するか?()ここでTは

ようこそいくつかの読書URL。

+2

このコードは非常に壊れやすいようです。設定でキーを持たない型で呼び出すと、例外がスローされます。 –

答えて

2

これは一般的な例です。 'T'は型を表す。例えば

string result = Get<string>(); 

は、ジェネリック医薬品のGoogle検索を行います。これにより、あなたは起動されます:http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

+1

Aw、coder ctrl + c/vを保存します。それを直接リンクにしてください。 ;-) –

+2

'int'が参照型ではないため、最初の例ではコンパイラエラーが発生します。ここで 'where'制約の重要性を言及するか(または最初の例を削除する) – RPM1984

+0

@brad http://goo.gl/nLUyy :) –

2

where T : classは、どのタイプがTに許可されているかを制約します。これは

  1. は、あなたが間違った型に入れた場合
  2. はあなたがアクセス方法/プロパティにアクセスしたり、あなたの方法のためにそう制約

に基づいてTのインスタンスをインスタンス与えるあなたのコンパイラエラーになりますintはクラスではないため、Get<int>()のように呼び出すとエラーになります。

public static T Get<T>() where T : class 
{ 
    string implName = Program.Settings[typeof(T).Name].ToString(); 
    var implType = Type.GetType(implName); 

    return (T)Activator.CreateInstance(implType); 
} 
+0

これはコンパイルされません。そのような過負荷は存在しません。 – SLaks

+0

ああ、はい...私の悪い、Tと型の引数はあいまいです。 –

1

これは、この特定のケースでは、Tを参照型に制限します。

関連する問題