我不知道C#(或底層的.NET框架)是否支持某種「通用委託實例」:這是一個委託實例,它仍然有一個未解析的類型參數,在代理被解析時被調用(不是在創建委託時)。我懷疑這是不可能的,但我仍然要求它...通用委託實例
這是我想要做的一個例子,用一些「???」插入C#語法似乎不可用的地方。 (顯然這個代碼不能編譯)
class Foo {
public T Factory<T>(string name) {
// implementation omitted
}
}
class Test {
public void TestMethod()
{
Foo foo = new Foo();
??? magic = foo.Factory; // No type argument given here yet to Factory!
// What would the '???' be here (other than 'var' :))?
string aString = magic<string>("name 1"); // type provided on call
int anInt = magic<int>("name 2"); // another type provided on another call
// Note the underlying calls work perfectly fine, these work, but i'd like to expose
// the generic method as a delegate.
string aString2 = foo.Factory<string>("name 1");
int anInt2 = foo.Factory<int>("name 2");
}
}
有沒有一種方法可以在C#中實際執行此類操作?如果沒有,這是語言的限制,還是在.NET框架?
編輯: 我想問的原因是因爲我想委託傳遞給函數在其他組件,並且不希望要求不必引用任何特定類型的其他組件(以下簡稱「富「在我的例子中的類)。我希望以某種方式彎曲標準Func <>委託,以適應「???」部分。
C#也知道這個詞var和將得到的構建類型。 – Younes 2010-03-12 10:44:11
你知道你可以foo.Factory(「名字1」),我想。你能否擴展你的問題來解釋爲什麼你需要使用魔術而不是foo.Factory ? –
2010-03-12 10:48:51
你也可以寫'對象':)。 object magic = foo.Factory; – 2010-03-12 10:54:35