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

Mut*_*raj 1 .net c# inheritance

遗产中有一个疑问,我有两个名为AB的类.
A基类,B派生类.B类继承A类的两个数据成员和两个成员函数.

在派生类中,访问静态数据成员是工作但访问非静态数据成员会产生错误.同样的情况也适用于会员职能.我无法访问非静态成员函数.

如果我访问静态或非静态变量| 函数里面的任何派生类函数都运行正常.

为什么我不能直接在课堂上访问.当我访问任何派生类函数时,为什么它不显示错误.任何人请澄清我的疑虑.

参考图像

 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();           
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 7

这条线是非法的:

string getMsg1 = alert1();
Run Code Online (Sandbox Code Playgroud)

因为它相当于

string getMsg1 = this.alert1();
Run Code Online (Sandbox Code Playgroud)

并且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();
  }
Run Code Online (Sandbox Code Playgroud)

构造的本体运行派生类,基础类字段初始化,和基类的构造体的字段初始.派生的构造函数体最后运行,因此您知道它已访问的所有东西都已创建.

我们在谈论它时:注意C#中的方法传统上以大写字母开头.

此外,在此代码中显示的确没有很好的理由来进行复制.您已经可以从派生类访问基类成员,那么为什么要将它们复制到派生类中?