一个类是否有可能只继承一些(不是全部)基类成员?

时间:2016-05-10 17:28:50

标签: c# class inheritance base-class members

有没有一种方法,派生类只能继承所有基类成员中的一些......在C#中? 如果可以进行此类操作,请提供一些示例代码。

3 个答案:

答案 0 :(得分:11)

  

派生类是否只能继承所有基类成员中的一些...在C#中?

是。创建一个具有一个方法,一个构造函数和一个析构函数的基类。它有三个新成员,加上其基类的可遗传成员。现在从中派生出一个类。构造函数和析构函数不会被继承;所有其他成员都会。因此,可以创建一个只继承其某些基类成员的派生类。

我怀疑答案令人不满意。

如果您的问题实际上是“基类是否可以限制派生类继承的可遗传成员?”答案是不。派生类继承基类的所有可遗留成员,无论其可访问性如何

如果您的问题是“派生类是否可以选择从基类继承哪些可归属成员?”答案是不。派生类继承基类的所有可遗传成员,无论其可访问性如何

如果您对此主题感兴趣,请进一步阅读:

https://ericlippert.com/2011/09/19/inheritance-and-representation/

答案 1 :(得分:1)

当你从另一个人那里继承一个类型时,你会得到一切 - 好的和坏的"父类型中的位("坏",在此上下文中,表示您不想要的东西)。

您可以通过new修饰符隐藏子类中父类的内容。但是,从多年的经验中获取这些建议......通常,这会导致大量工作花在以子类的工作方式进行变通方法上。如果不是这样,你就可以省去很多麻烦,重新设计课程。

如果子类型必须从父类型中删除功能,则父级中可能存在设计缺陷。重塑它以减少功能。您可以在不同的子项之间重新分配其不同的功能。一个班并不总是必须是唯一的孩子,你知道;)

答案 2 :(得分:0)

不,这是不可能的。你是否想象Cat派生Animal和孩子(Cat)决定动物的兴趣与否? cat 动物,但无法更改。

BTW, interfaces 可用于隐藏详细信息。例如:

public interface ISome
{
    string Text { get; set; }
}

public class A : ISome
{
    public string Text { get; set; }
    public string Text2 { get; set; }
}

public class B : A
{
}

// This is an upcast. You're reducing the typing of an instance of B
ISome a = new B();
string text2 = a.Text2; // Error, Text2 isn't a property of ISome
string text = a.Text; // OK, Text is a property of ISome