我目前正在使用一些旧的 C# 代码,它基本上使用派生类型,其唯一目的是使用 Type 作为“属性”,例如:
public abstract class Fruit
{
public int Property { get; set; }
}
public class Apple : Fruit {}
public class Pear : Fruit {}
接着:
public void Foo(Fruit item)
{
if(item is Apple)
{
// do something
return;
}
if(item is Pear)
{
// do something
return;
}
throw new ArgumentOutOfRangeException("item");
}
我会在 BaseClass 上包含一个枚举属性来指定“类型”:
public class Fruit
{
public int Property { get; set; }
public FruitType Type { get; set; }
}
public enum FruitType
{
Apple,
Pear
}
然后这样使用它:
public void Foo(Fruit item)
{
switch(item.Type)
{
case FruitType.Apple:
// do something
break;
case FruitType.Pear:
// do something
break;
default:
throw new ArgumentOutOfRangeException();
}
}
我觉得前一种模式是对继承的滥用,但是在重写这段代码之前我应该考虑它的任何优点吗?