gpt4 book ai didi

c# - 继承 - 无法访问派生类中的基类数据成员

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:27 24 4
gpt4 key购买 nike

继承的一个疑惑,我有两个类AB
A基类B派生类。B类继承了A类的两个数据成员和两个成员函数。

In derived class, accessing the static data member is Working but accessing the non static data member gives error. This same case is also for Member Functions. I can't access non static member function.

如果我访问静态或非静态变量|任何派生类函数中的函数都可以正常工作。

为什么我不能在类里面直接访问。为什么当我访问任何派生类函数内部时它不显示错误。任何人都请澄清我的疑问。

reference Image

 class A
{
protected string msg1;
protected static string msg2;

protected string alert1() {
return "Welcome";
}
protected static string alert2()
{
return "Welcome All";
}
}
class B : A {

string copyMsg1 = msg1;
string copyMsg2 = msg2;

string getMsg1 = alert1();
string getMsg2 = alert2();

void display() {
msg1 = "";
msg2 = "";
alert2();
}
}

最佳答案

这一行是非法的:

string getMsg1 = alert1();

因为它等同于

string getMsg1 = this.alert1();

并且在字段初始值设定项中访问 this 是非法的。为什么?因为字段初始值设定项在派生类构造函数或基类构造函数之前运行,因此您可以调用依赖于已经运行的构造函数的方法

正确的解决方案是将初始化放入构造函数中:

class B : A {
string copyMsg1;
string copyMsg2;
string getMsg1;
string getMsg2;

public B()
{
this.copyMsg1 = this.msg1;
this.copyMsg2 = A.msg2;
this.getMsg1 = this.alert1();
this.getMsg2 = A.alert2();
}

构造函数的主体派生类的字段初始值设定项、基类的字段初始值设定项和基类的构造函数主体之后运行。派生的构造函数主体最后运行,因此您知道它访问的所有内容都已创建。

说到这里:请注意,C# 中的方法传统上以大写字母开头。

此外,此代码中根本没有显示进行复制的充分理由。您已经可以从派生类访问基类成员,那么为什么还要将它们复制到派生类中呢?

关于c# - 继承 - 无法访问派生类中的基类数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42054176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com