假设我想将一些 xml 解析成一个强类型的类。当我得到xml时,我不知道它应该是A型还是B型,直到我打开它并查看它。我可以看一下,并返回一个像这样的枚举:
BaseType x = null;
TypeInfoEnum typeInfo = BaseType.GetTypeInfo(xml);
if(typeInfo == TypeInforEnum.TypeA)
{
x = BaseType.ParseXmlToTypeA(xml);
// do other work on Type A
}
else if(typeInfo == TypeInfoEnum.TypeB)
{
x = BaseType.ParseXmlToTypeB(xml);
// do other work on Type B
}
或者我可以只用一种方法处理解析并检查类型:
BaseType x = BaseType.ParseXml(xml);
if(x.GetType() == typeof(TypeA))
{
// do work on Type A
}
else if(x.GetType() == typeof(TypeB))
{
// do work on Type B
}
只是想从您喜欢的设计角度获得其他人的想法。现在,细节不是很重要。我只是根据 xml 中的内容从单个 XML 源创建 2 种不同的类型。没什么复杂的。
更新:
感谢您到目前为止的答案。类型在这里并不重要,但作为示例,类层次结构可能如下所示:
class BaseType
{
public string CommonData { get; set; }
}
class TypeA : BaseType
{
public string TypeASpecificData { get; set; }
}
class TypeB : BaseType
{
public string TypeBSpecificData { get; set; }
}
由于此功能将被集成到其他人将使用的程序集中,因此我喜欢使用 Enum 的第一个选项,因为让 API 的用户检查某物的类型似乎很尴尬,即使用 Enum 在语义上似乎更彻底。