当前位置: 首页 > 编程语言 > C#

如果派生类继承基类的私有成员,为什么不用构造函数?分享

时间:2023-04-10 17:14:25 C#

如果派生类继承基类的私有成员,为什么不用构造函数呢?我希望能够清楚地了解c#中的这个基本的OOPS概念。在大多数Internet站点上,我读到派生类继承了基类的私有成员,但它不能访问这些成员。派生类可以访问基类的public、protected、internal和protectedinternal成员。即使派生类继承了基类的私有成员,也不能访问这些成员。但是,所有这些私有成员仍然存在于派生类中,并且可以执行与基类本身相同的工作。例如,假设一个受保护的基类方法访问一个私有字段。该字段必须存在于派生类中,继承的基类方法才能正常工作。资料来源:http://msdn.microsoft.com/en-us/library/ms173149.aspx我的问题是,如果我们认为上述情况成立,那么我们可以说“基类的构造函数在派生类中定义类,但派生类只能使用base关键字通过自己的构造函数访问/调用它,并且在创建派生类的实例时该构造函数对外界不可用”。publicclassEmployee{publicintsalary;publicEmployee(intannualSalary){工资=annualSalary;}}publicclassManager:Employee{publicManager(intannualSalary):base(annualSalary){//在此处添加进一步说明。调用基类构造函数,它应该存在于该类中。也许我的解释是错误的。有人可以解释一下吗?提前致谢!这取决于你如何定义“现在”。如果基类中的私有成员以及构造函数被定义为“在某处可用”,则它“存在”。如果您将“存在”定义为“在该特定类别中找到”,则两者都不是“存在”。尝试使用反射。您不会找到基类的任何私有成员。私有成员被继承并因此可用,但仍然只在基类中。构造函数也是如此。A类{privateA(inti){}publicA(){}privatevoidFoo(){}publicvoidBar(){}}B类:A{}varaProperties=typeof(A).GetMembers(BindingFlags.实例|BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.FlattenHierarchy);//你不会在这一行看到Foo,也不会看到A的任何构造函数最后,你可以说:为了构造一个Manager,你需要使用基类中的任意构造函数来构造基类,如果只有一个(如本例)则需要调用它。这并不意味着您必须定义具有相同签名的构造函数。您也可以这样做:publicManager():base(100000){}或publicManager(stringname,intsalary):base(salary){//storename}在构建Manager期间,您将分配一个新对象.该对象将声明足够的内存,以便它可以存储在基类(Employee)和具体类(Manager)中定义的变量。"派生类中继承了基类的构造函数,但是派生类只能通过自己的构造函数使用base关键字来访问/调用它,并且当派生类实例化时,这个构造函数对外是不可用的被建造”。是的,这是正确的。因为要调用基类的构造函数,它应该存在于那个类中。就像基地的私有或受保护成员一样,它是“现在”的,但不能从外部访问。如果有一个类可以为每个超类构造函数指定,系统应该推断存在一个具有相同签名和访问权限的子类构造函数,除了处理字段初始化器和链接之外,这将很有用。到相应的基本构造函数。通过特定请求提供此类功能不太可能导致错误;当派生类没有指定任何构造函数(而不是仅仅推断链接到基本无参数构造函数的无参数构造函数)时,如果这是一个语言设计特性(添加这样的特性),那么即使是推断也是完全安全的。然而,对于现有的框架,这是一个坏主意,因为想要公开无参数构造函数而不是任何参数化构造函数的派生类的作者可能不包含任何构造函数,期望编译器仅推断无参数构造函数)。但是,如果派生类有自己的任何非平凡构造函数,则子类可能不打算在不通过其中一个的情况下创建任何对象。假设父类只有一个参数化构造函数,有人这样写:classChild:Parent{Thingblah;Child(){blah=newThing();}}创建的每个Child都会有一个新的Thing。现在假设基类的新版本添加了Name属性,并添加了一个指定名称的构造函数。如果构造函数是自动继承的,则代码为myChild=newChild("Fred");将链接到Parent的构造函数,但永远不会设置为新事物。如果一个类可以通过链接到父构造函数然后执行指定的代码块来建立子类不变量,则可以指定一个应该产生每个实例的安全构造函数“继承”。然而,这样的功能实现起来有点复杂,而且还不清楚它是否值得付出代价。以上是C#学习教程:如果派生类继承了基类的私有成员,为什么不用构造函数呢?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: