如何实例化C#抽象类?

7

我希望实现一个迷你市场程序。有一个名为(Goods)的抽象类和两个派生类(干货和冷藏货品)。如何在此基础上添加一些商品?(例如鸡蛋,牛奶,大米等)


1
只需从DryGoodsColdGoods继承它们?您能否[编辑]问题以显示您拥有的类以及如何使用其他类(例如鸡蛋,牛奶等)? - Rhumborl
我有另外三个类(冰箱)、(货架)和(购物车)。我想要使用这些物品将它们放在货架上或者冰箱里。并且创建一个Winform来展示这些物品,将它们放入购物车并结账,就像顾客一样。 - Saja
3个回答

15

你无法实例化一个抽象类,它的唯一目的是作为基类。你的Eggs,Milk,Rice类必须从Goods派生并实现功能,如下所示:

public abstract class Goods 
{

}

public class DryGoods : Goods
{

}

public class ColdGoods : Goods
{

}

然后您可以让更原始的物品继承干货或冷藏货物。

public class Egg : DryGoods
{

}

public class Milk : ColdGoods
{

}

如果您不需要将MilkEgg作为轻量级类(或可转移对象)使用,则可以直接使用派生的DryGoodsColdGoods类型,并具有GoodsType属性:

DryGoods egg = new DryGoods();
egg.GoodsType = DryGoods.Egg;

ColdGoods milk = new ColdGoods();
milk.GoodsType = ColdGoods.Milk;

4
“DryGoods”和“ColdGoods”可能也应该抽象化,不是为了代码,而是为了业务逻辑。 - Nameless One
如果是我,我会创建一些干货和冷藏货物的实例,而不是创建新的实体。 - Mahdi Farhani
如果我从派生类创建对象,那么 (GoodsType) 的作用是什么? - Saja
@Saja - 我加了一个替代方案(如果你不想要牛奶、鸡蛋等实体)。这只是一种设计偏好。 - Darren

4

看,你有一个抽象基类:

public abstract class Good { }

这里是你的命名类:

public class Egg : Good { }

public class Milk : Good { }

public class Rice : Good { }

现在您可以向基类Good添加属性和方法。

您现在也可以向命名类Egg、Milk和Rice添加属性和方法 :)

如果将Goods重命名为Good,则现在还可以拥有多个Egg、Milk和Rice:

var allGoods = new List<Good>();

var eggs = new Egg[16];
allGoods.Add(eggs);

var milk = new Milk[64];
allGoods.Add(milk);

var rice = new Rice[64];
allGoods.Add(rice);

0

你需要创建子类的对象,并使用该子类对象来设置值。你不能实例化一个抽象类,只能将其用作基类。


谢谢,我应该在哪里创建对象?在WinForm实现中吗? - Saja
在.cs文件中,它有一个子类中的对象应该被创建。 - Abhishek Panjabi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接