c#, .net,通用编程体系结构.GetType或Enum:哪个更好
本文关键字:Enum 更好 体系结构 net 编程 GetType | 更新日期: 2023-09-27 18:13:16
你认为哪个更好……
if (thing.GetType() == typeof(thisthing))
{
//do stuff for this type of thing.
}
或者给对象一个Enum属性
if (thing.TypeName == NamesEnum.thisthing)
{
//do stuff for this type of thing.
}
这两种方法都不是特别可扩展或可维护的方法。
通常最好将其直接设计为类型层次结构中的虚方法,然后直接调用该方法。这允许其他类重写并提供适当的自定义功能。
在你的例子中,thisthing
类型(如果你想遵循。net的命名约定,它应该被命名为ThisThing
)将只有一个DoStuff
方法,如果需要,它可以是虚拟的,并调用它。
这取决于:
if (thing.TypeName == NamesEnum.thisthing)
将比GetType()
as运行性能更高,这是两个数值的简单比较。
但:
if (thing.GetType() == typeof(thisthing))
更加"灵活":当你做一些重构,改变类型名称或其他什么,这个条件仍然有效。
但是在条件下会失败,如果2个类型属于2个不同的程序集,而不是在第一种情况下,这仍然会匹配为相等,因为您不比较types
,而只是比较enum值。
总之,没有最好的方法,只有最适合你的。
如果您正在使用没有子类型的基本类型…第一个示例可以很好地缩短为
if (thing is typeof(thisthing))
看情况而定。如果你有很多不同的类型,你会需要一个switch语句,所以如果有很多类型,我会选择选项2。