【发布时间】:2018-12-23 08:18:39
【问题描述】:
我为了能够从另一个项目中读取文件,我正在复制写入代码并根据需要对其进行调整。
我遇到了一个看起来很丑陋的古玩结构,但我不知道是否有其他方法可以处理它。
代码如下所示:
int type = reader.readInt32():
BaseClass p = BaseClass.Instantiate((BaseClassEnum)type);
object.Read(reader);
这段代码看起来不错,确实不错,但是 BaseClass.Instantiate(BaseClassEnum type) 方法还有一些不足之处。
基本上,它是一个巨大的 switch case 语句,根据传递的类型参数实例化基类的子类。
有什么方法可以避免这里的 switch case 吗?我可以创建一个字典,将 BaseClassEnum 映射到某种允许我调用它的构造函数的类引用吗?比如:
Dictionary<int, ???> bindings = new Dictionary<int, ???>(){
{BaseClassEnum1, SubClass1},
{BaseClassEnum2, SubClass2}
}
//...
//Assuming SubClass1 has a constructor SubClass1()
BaseClass p = new bindings[BaseClassEnum1]();
//I could even create a new constructor SubClass(BinaryReader reader) and do
BaseCoass p = new bindings[BaseClassEnum1](reader);
最后,代码将如下所示:
BaseClass p = new bindings[(BaseClassEnum)reader.ReadInt32()](reader);
【问题讨论】:
标签: c# inheritance