为什么受保护的成员只能通过派生类的方法访问

Sim*_*ons -1 .net c# oop inheritance derived-class

我有父类:

class clsTestParent
    {
        protected int x;

        public void Foo()
        {
            x = 10;
        }

    }
Run Code Online (Sandbox Code Playgroud)

我有Derrived Class如下:

class clsDerivedTest : clsTestParent
    {

            x = 10;
            Foo();

    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为我遇到两个错误:

类,结构或接口成员声明中的标记'='无效
方法必须具有返回类型

但是当我尝试将它们与派生类中的方法一起使用时,上述语句工作正常,如下所示:

 class clsDerivedTest : clsTestParent
    {


        public void myTestMethod()
        {
            x = 10;
            Foo();
        }
}
Run Code Online (Sandbox Code Playgroud)

为什么受保护的var或方法只能通过使用派生类方法访问,但不能在类中直接访问.

我甚至尝试通过创建对象来访问受保护的成员,如下所示:

clsDerivedTest objDerivedTest = new clsDerivedTest();
            objDerivedTest.x = 10;
Run Code Online (Sandbox Code Playgroud)

但是再次获得保护级别的错误.我有var作为保护,所以为什么派生类的对象不能访问它?

我需要清除OOP的基本原理,但要坚持到这里.

Ces*_*Gon 5

好吧,除了初始化之外,方法体是唯一可以执行代码的地方.您的语句x = 10;是一个赋值表达式,应该放在方法体中.

所以,这将在类级别工作:

int x = 10;
Run Code Online (Sandbox Code Playgroud)

因为它是一个字段声明加上初始化器.但是一个简单的赋值语句不起作用.可以这样想:如果你放在x = 10;班级中间,在每个方法之外,什么时候会运行?没有办法"调用"它.

如果您希望它在对象构造上运行,请为它创建一个方法或将您的赋值放在类构造函数中.