为什么受保护成员只能通过派生类的方法访问
本文关键字:派生 方法 访问 受保护 成员 为什么 | 更新日期: 2023-09-27 18:10:26
我有父类:
class clsTestParent
{
protected int x;
public void Foo()
{
x = 10;
}
}
我有如下的派生类:
class clsDerivedTest : clsTestParent
{
x = 10;
Foo();
}
但这是不工作,因为我得到以下两个错误:
类、结构或接口成员声明中无效的令牌"="
方法必须具有返回类型
但是,当我尝试将上述语句与派生类中的方法一起使用时,上面的语句可以正常工作,如下所示:
class clsDerivedTest : clsTestParent
{
public void myTestMethod()
{
x = 10;
Foo();
}
}
为什么受保护的var或方法只能通过派生类方法访问,而不能直接在类中访问。
我甚至尝试通过创建如下对象来访问Protected成员:
clsDerivedTest objDerivedTest = new clsDerivedTest();
objDerivedTest.x = 10;
但是保护级别再次出现错误。我有var作为保护,所以为什么派生类的对象不能访问它?
我需要清除我的oop基础知识,但停留在这里。
方法体是唯一可以执行代码的地方,除了初始化器。语句x = 10;
是一个赋值表达式,应该放在方法体中。
因此,这将在类级别上工作:
int x = 10;
,因为它是一个字段声明加初始化器。但是简单的赋值语句不起作用。这样想:如果你把x = 10;
放在类体的中间,在每个方法之外,它什么时候运行?没有办法"调用"它。
为它创建一个方法,或者如果你想让它在对象构造中运行,就把你的赋值放在类构造函数中。
你知道你的问题-我需要清理我的面向对象的基础知识,但困在这里。
清除受保护成员的概念:
受保护关键字是成员访问修饰符。受保护的成员可以在声明它的类中访问,也可以在从声明该成员的类派生的任何类中访问。
class A
{
protected int x = 123;
}
class B : A
{
void F()
{
A a = new A();
B b = new B();
a.x = 10; // Error
b.x = 10; // OK
}
}
此外,如果你仔细阅读c#语言规范将会很好。这会让你理解得更清楚。
"为什么受保护的var或方法只能通过派生类方法访问,而不能直接在类中访问。"您要做的是直接在类主体中添加代码。这行不通。现在有oo语言允许这样做。
要将x初始化为10,可以使用类的构造函数…
class clsDerivedTest : clsTestParent
{
public clsDerivedTest()
{
x = 10;
}
}
c#中不能在类体中调用函数
除了一些变量声明外,所有内容都放在方法体中。调用方法进入方法体。当你有一个以上的类时,它们之间的通信是通过使用方法来实现的。