我與目前一些老的C#代碼,基本上使用派生類型使用類型爲「財產」的唯一目的,如工作:使用Type作爲'Property'是不好的做法嗎?
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();
}
}
我覺得前一種模式是濫用繼承,但是在重寫這段代碼之前我應該考慮一下嗎?
這是一個非常設計的氣味 - 無論是原始版本,還是帶有枚舉的版本。改用多態性。我能想到的一個優點是,如果您無法修改需要打開的類層次結構。 – millimoose
在第二個例子中,爲什麼這個類仍然是抽象的?它不應該被封住嗎? –
@Eric yep不應該是抽象的,更新 – lockstock