【发布时间】:2015-11-05 12:50:15
【问题描述】:
给定类:
enum ThingEnum { A,B,C}
interface IThing { }
class A : IThing { }
class B : IThing { }
class C: IThing { }
我脑子里有两个IThingFactory 的实现。一个使用switch:
class ThingFactory
{
public IThing MakeThing(ThingEnum type)
{
switch (type)
{
case ThingEnum.A:
return new A();
break;
case ThingEnum.B:
return new B();
break;
case ThingEnum.C:
return new C();
break;
default:
break;
}
}
}
另一个使用抽象和方法重载的方法:
class ThingFactory
{
public IThing Make(A a)
{
return new A();
}
public IThing Make(B a)
{
return new B();
}
public IThing Make(C a)
{
return new C();
}
}
我的问题是:
- 哪个实现更快,
- 哪个更易读/更容易理解,
- 您将使用哪个以及为什么?
【问题讨论】:
-
您不能根据枚举值进行方法重载。您打算如何区分它们?枚举和返回的类的确切语义是什么?
-
顺便说一句,IThingFactory 应该被称为 ThingFactory 因为它是一个类而不是一个接口。
-
尝试编译两者,你会得到答案...
-
@JCode,你的类的名字和 ThingEnum 一样吗?
-
@JCode,因此您需要一个描述关系 enumValue - 类的代码。它们的性能几乎相同,但第一个变体的变体更易于阅读。只需创建单元测试,检查相关类的所有枚举值,如果需要,检查所有 IThing 类的相关枚举值。
标签: c# performance switch-statement overloading