English 中文(简体)
避免从基地类别中回收所有物品
原标题:Avoiding Inheriting All Things from Base Class
  • 时间:2009-10-10 03:43:57
  •  标签:

我正在考虑这样的情况:

=>>;A derived from Utopia andmains/em>

=>>;<>/strong>A衍生等级,内自Utopia

以上有几类,Baka型应当继承某些具体领域和方法,但如何? 我怎么能具体说明只有巴卡才能继承的田地和方法,而瓦特希则继承乌托尼娅的所有东西。

www.un.org/Depts/DGACM/index_spanish.htm Sam:

class Utopia {
   public string Moshi;

   [Exclude(ClassName("Baka"))]
   public string HaveIt;
}

class Baka : Utopia 
{
 // only Moshi appears here
 base.[Moshi]
}

class Watashi : Utopia 
{
  base.[Moshi][HaveIt];
}

www.un.org/Depts/DGACM/index_spanish.htm 如果我想使用多形态:

   Utopia _utopiaBaka = new Baka();
   _utop.[Moshi];

   Utopia _utopiaWatashi = new Watashi();
   _utopiaWatashi.[Moshi][HaveIt];

当然,《框架》还检查了衍生产品类别,不论它们是其他类型的基础课程。

问题回答

将百科全书制成不止一类。 任何阶层都可以继承一个等级,因此Baka将继承该等级。

然后,扩大本部分乌托米亚等级,增加其他方法,并继承Watashi。

这样,你就能够选择他们需要哪些方法才能延长基级。

这不是OOP的继承如何运作。 巴卡继承了Utopia与Watashi一样的一切。

This is not how inheritance works, you would have to split up your classes. If you and your girlfriend get a child, you can t chose that it only inherits genes for blue eyes and a musculus body :)

我建议研究publicprotected之间的区别。 就像你所期望的那样。

你们想要做的是完全不符合以目标为导向的方案规划中的继承概念。 如果蓝色不是蓝色,那么它就象要求“蓝色吗?

当某类(Baka)继承另一类(乌托尼娅)时,这意味着(在欧佩组织中)巴卡能够做乌托阿语所能做的一切,而欧佩组织语言则提供依赖这些语言的特征,如果你能够推翻你,就会造成可怕的例外。

例如,如果我采用一种方法,将乌托尼亚类类作为一种辅助器:

public void TakesUtopia(Utopia utopia)
{
    utopia.BePerfect();
}

我们还可以在Watashi和Baka类的班子里通过,因为他们都继承了Utopia。 Baka通过从乌托尼阿继承的方式,保证实施“贝托德”方法。

如果Baka的某个案例没有执行的话,就会发生可怕的情况。

为此,考虑在“Utopia”依靠Utopia的行为时发生的情况。 例如,Says utopia 暴露了一种PricofHappiness财产。

public string TakesUtopia(Utopia utopia)
{
     if (utopia.PriceOfHappiness() > 100)
     {
          return "Can t buy happiness ;
     }
}

在撰写我的脑膜炎方法时,我是否应该写成法典,处理在乌托皮亚的任何方法都没有得到执行的问题? 当这些方法被称作时,这些方法会是什么?

有两个不同的概念:接口和继承。 从根本上说,它们有两个不同的问题。 一种是“我是否想与这个目标互动?” 。 第二是“这一物体在内部工作吗?” (继承)。

在传统的OOP实例中,考虑一个基类:

class Shape {
    virtual void draw();
    virtual int size();
}

这是一个接口,它界定了你如何以不同的形式开展工作。 现在考虑这些问题:

class Square : Shape {
    ...
}

class Circle : Shape {
    ...
}

虽然与这两个班的接口相同(大小),但执行工作不会有共同之处。 圈子的绘画法是否与广场的绘画法完全相关? 无,他们只是同一个名字和办公室;期望的结果。

我之所以这样说,是因为如果你想要某些班子继承其他班子的某些成员,那么你可能会有把遗产与接口混为一谈的问题。 AFAIK, C++ 固定支持接口(这很可能是错误的)。 但是,你可以用纯粹的虚拟班子(如上沙皮)来回避。

class Shape {
    virtual void draw();
}

class EdgyShape : Shape {
    virtual int width();
    virtual int height();
}

class RoundyShape : Shape {
    virtual int radius();
}

现在,你与一无所有,但根本没有执行。

class Circle : RoundyShape {
    ...
}

class Rectangle : EdgyShape {
    ...
}

class Square : Rectangle {
    ...
}

因此,在Retangle和广场相互之间没有守则。 所有3个都拥有相同的沙皮基本接口,有些增量取决于类型。

难道这可以说明如何重新评价你的等级,以便你能够更好地分立?





相关问题