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