【问题标题】:How to instantiate abstract class c#? [closed]如何实例化抽象类c#? [关闭]
【发布时间】:2016-04-30 11:34:03
【问题描述】:

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

【问题讨论】:

  • 只是从DryGoods 或ColdGoods 继承它们?你能edit这个问题来展示你的课程以及你想如何使用其他课程(鸡蛋、牛奶等)
  • 我有另一个类(冰箱)、(货架)和(购物车)我想用这些物品把它们放在架子上或冰箱里。并制作一个winform来显示商品,将它们放入购物车并结帐,就像客户一样

标签: c# .net oop abstract


【解决方案1】:

您不能实例化抽象类。它的唯一目的是充当基类。您的 Eggs, Milk, Rice 类必须从 Goods 派生并实现功能,如下所示:

public abstract class Goods 
{

}

public class DryGoods : Goods
{

}

public class ColdGoods : Goods
{

}

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

public class Egg : DryGoods
{

}

public class Milk : ColdGoods
{

}

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

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

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

【讨论】:

  • DryGoods 和 ColdGoods 也应该是抽象的,不是为了代码,而是为了业务逻辑。
  • 如果是你,我会创建 DryGoods 和 ColdGoods 的一些实例,而不是创建新实体。
  • 如果我从派生类中创建对象,那么 (GoodsType) 有什么用?
  • @Saja - 我添加了它作为替代(如果你不想要实体牛奶、鸡蛋等)。这只是一种设计偏好。
【解决方案2】:

看,你有一个抽象基类:

public abstract class Good { }

你有你的命名类:

public class Egg : Good { }

public class Milk : Good { }

public class Rice : Good { }

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

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

如果您将 Goods 重命名为 Good,您现在还可以拥有多个鸡蛋、牛奶和米饭:

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

【讨论】:

    【解决方案3】:

    您必须创建子类对象并使用该子类对象来设置值。您不能实例化抽象类。您只能将其用作基类..

    【讨论】:

    • 谢谢,我应该在哪里制作这些物品?在 WinForm 实现中?
    • 在它拥有的 .cs 文件中。您应该在子类中创建一个对象。
    猜你喜欢
    • 1970-01-01
    • 2014-10-13
    • 2016-09-21
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多