C#继承从父类调用派生类函数

时间:2012-06-14 13:35:13

标签: c# inheritance

我有一个A级已经太长了。所以我决定将它的一些功能移到B类。我已经从B继承了B.

现在A中有函数,需要B中的函数。我的问题是我应该在A类中实例化B类。我不能在类A构造函数中实例化,因为B类将调用基类来创建一个从不结束循环。

我只想要将类B实例化一次,因为类A构造函数具有我只想初始化一次的对象。

我现在甚至不确定我是否有任何意义。

5 个答案:

答案 0 :(得分:4)

继承严重过度使用。特别是在您的情况下,您希望更喜欢composition over inheritance

答案 1 :(得分:3)

base关键字允许您访问超类(基类):http://msdn.microsoft.com/en-us/library/hfw7t1ce(v=vs.71).aspx

BUT: 如果您唯一关心的是类的长度,那么使用部分类(http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.80).aspx)可能是更好的解决方案。您可以将班级拆分为多个文件。显然你现在正在做的不是继承的意图和意义。

答案 2 :(得分:1)

首先,当你的课程太长时,定义一个新课程并不是最好的做法。如果所有功能在逻辑上与同一个对象相关,则无论多长时间,都可以将它保存在同一个类中。

如果您希望B只实例化一次,则应将其设为静态类。您可以在此处找到有关静态类的更多信息: http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

答案 3 :(得分:1)

如果你在A中使函数变得抽象(这也必须使A抽象),那么就像通常那样从A的方法中调用这些方法。然后使用您想要的逻辑覆盖B中的抽象函数。当用户实例化B类时,即使包含该实例的变量的编译时类型为B,这些调用也会转换为A中的调用。

答案 4 :(得分:1)

如果存在真正的“is-a”关系,则应该只使用继承。对我来说,这听起来像是在描述B类所需的功能。也许B“有一个A”所以你应该考虑构成而不是继承:

public class B
{
    private A a;

    public B(A a)
    {
       this.a = a;
    }

    public void UseAFunction()
    {
        a.MyFunction();
    }
}