我知道这个问题之前已经被问过了,但是我还没有看到一个简短明了的答案,所以我希望他们不会移除这个问题,并且我现在能够得到一个清晰的答案:
我目前正在使用C# 5.0; .NET 4.5;VS 2012。虽然我用C#做了很多工作,但我主要是Delphi开发者。
在Delphi中,我编写了数百个类工厂,它们使用以下设计(这里大大简化):
unit uFactory;
interface
type
TClassofMyClass = class of TMyClass;
TFactoryDict = TDictionary<TMyEnum, TClassofMyClass>;
var fDict:TFactoryDict;
implementation
procedure initDict;
begin
fDict:=TFactoryDict.create;
fDict.add(myEnum1, TMyClass1);
fDict.add(myEnum2, TMyClass2);
fDict.add(myEnum3, TMyClass3);
end;
function Factory(const aEnum: TMyEnum): TMyClass;
var
ClassofMyClass: TClassofMyClass;
begin
if fDict.TryGetValue(aEnum, ClassofMyClass) then
result := ClassofMyClass.Create(aParam);
end;
end.
现在:在 C# 中如何做类似于这样的事情?!似乎在 C# 中没有“class of”类型。我有什么遗漏吗?如何简单而优雅地实现此类型的类工厂在 C# 中?Python 中也可以实现此设计 - 为什么 C# 会更差呢?!