我有一个类:
public class Food
{
public static IList<Ingredient> ingredients
public bool uses(Ingredient i)
{
return ingredients.Contains(i);
}
}
然后我继承它来制作各种食物,例如:
public class Cake : public Food
{
public static IList<Ingredient> ingredients = new List<Ingredient>()
{
Sugar,
Eggs,
Milk
}
}
现在我希望能够做到
Food f = getFood();
if (f.uses(Eggs))
{
// Do something
}
因此,我想要一个(例如)所有蛋糕都可以共享的静态成分列表,而不是每个 Cake 实例的列表,并且能够以虚拟方式访问它。
如果需要的话,我愿意修改代码以获得类似的效果!
最佳答案
在这种情况下,OOD“更喜欢”将 Food
类抽象化,因为 Food
的“成分”会有所不同。因此,正如其他人指出的那样,使此列表静态是没有意义的,因为静态应该是不通过对象区分的属性的修饰符。
我建议的解决方案如下:
public abstract class Food
{
public abstract IList<Ingredient> Ingredients
{
get;
}
}
现在,任何类(作为具体的类)都将由 Food
驱动,因此它必须实现此属性,以便提供自己的成分
:
public class Cake : Food
{
public override IList<Ingredient> Ingredients
{
get {
return new IList<Ingredient>()
{ Sugar, Eggs, Milk };
}
}
}
关于c# - 我怎样才能在c#中拥有一种虚拟静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704879/