2016-04-30 350 views
5

我想实施一个迷你市场计划。 有一个名为(Goods)的抽象类和它的两个派生类(干货和冷货)。 如何在此之后添加一些项目? (鸡蛋,牛奶,米饭等)如何实例化抽象类c#?

+1

只需从'DryGoods'或'ColdGoods'继承它们?你可以[编辑]问题,以显示你有什么课程,你想如何使用其他(蛋,牛奶等) – Rhumborl

+0

我有另一类(冰箱),(架子)和(购物车) 我想使用的项目把它们放在架子上或冰箱里。并制作一个winform来展示这些商品,把它们放到购物车并结帐,就像客户 – Saja

回答

13

你不能实例化一个抽象类。它的唯一目的是充当基础班。鸡蛋,牛奶,大米类必须从商品派生并实现该功能,如下图所示:

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'应该可能也是抽象的,不是为了代码的缘故,而是为了商业逻辑。 –

+0

如果你是,我创建DryGoods和ColdGoods的一些实例,而不是创建新的实体。 –

+0

如果我从派生类中创建对象,那么(GoodsType)有什么用? – Saja

0

您必须创建子类的对象并使用该子类的对象可以设置值。你不能实例化一个抽象类。你可以使用它作为唯一的一个基类..

+0

谢谢,我应该在哪里制作对象? WinForm实现中的 ? – Saja

+0

它拥有.cs文件。你应该在子类中创建一个对象。 –

4

瞧,你有一个抽象基类:

public abstract class Good { } 

有你有你的命名类:

public class Egg : Good { } 

public class Milk : Good { } 

public class Rice : Good { } 

您现在可以添加属性和方法的基类好。

现在,您还可以添加属性和方法来命名类鸡蛋,牛奶和大米:)

现在,您也可以有多个鸡蛋,牛奶和大米,如果重命名GoodsGood

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);