有了這個代碼:Activator.CreateInstance和使用表達式之間有明顯的區別嗎?
public static class ChocolateFactory<T>
{
private static Func<int, int, T> Func { get; set; }
static ChocolateFactory()
{
ChocolateFactory<EmergencyChocolate>.Func = (a, b) => new EmergencyChocolate(a, b);
}
public static T CreateChocolate(int a, int b)
{
return (T)Activator.CreateInstance(typeof(T), a, b);
//return ChocolateFactory<T>.Func(a, b);
}
}
如果我運行:
var myChocolate = ChocolateFactory<EmergencyChocolate>.CreateChocolate(1, 2);
是否有創造的兩種方法(一個被註釋掉)之間的顯著差異? Activator的代碼更清晰,但我知道它可以更慢,但我想知道如果我忽略了其他任何東西。我也想知道這裏是否有預先編譯好的東西。
此外,如果不使用激活器,這裏的方法名稱是什麼?
你能解釋爲什麼'返回ChocolateFactory .Func(a,b);'只適用於一種類型? –
2015-02-23 11:13:50
在你的例子中,你有這個硬編碼:新的EmergencyChocolate(...),這就是爲什麼。使用激活器你沒有參考具體的類,你總是使用T和typeof(T) – dustinmoris 2015-02-23 11:16:40
哦,我沒有注意到什麼是func返回。感謝您的解釋。順便說一句,我不是問題的主人...... :) – 2015-02-23 11:18:52