在派生类中无法访问受保护的函数
本文关键字:访问 受保护 函数 派生 | 更新日期: 2023-09-27 18:26:16
我正在制作一个简单的C#控制台应用程序来测试继承,但当我添加两个新类并相互继承时(Mammal:Animal),并在Program.cs class I-e 中制作一个哺乳动物对象
程序.cs
Mammal mam = new Mammal();
mam.see(only public function are showing of animal not the protected member of function)
Animal.cs
class Animal
{
protected void check()
{}
public void see()
{}
}
哺乳动物
class Mammal:Animal
{
public void hair()
{}
}
无法弄清楚为什么它不允许,因为protected允许在其层次结构中继承。
Mammals
中的代码可以访问Animals
的受保护成员,但只能通过类型为Mammals
或子类型的表达式访问。
从外部的类(我认为是这样)无法访问受保护的成员。
来自C#5规范第3.5.3节(重点矿井):
当在声明
protected
实例成员的类的程序文本之外访问该成员时,以及当在声明该成员的程序的程序文本以外访问protected internal
实例成员时,访问必须在从声明它的类派生的类声明内进行。此外,访问需要通过派生类类型的实例或由派生类类型构造的类类型进行
(正如Jonathan Reinhart所指出的,您几乎肯定希望这些类型被称为Mammal
和Animal
。)
下面是访问派生类中受保护方法的方法
class Animal
{
protected void check()
{}
public void see()
{}
}
class Mammal:Animal
{
public void CallSee()
{
Animal obja = new Animal();
obja.see();
}
}
现在您可以创建Mammal类的实例并调用方法callSee,该方法将依次调用Animal的see方法。如上所述,建议受检测的成员在派生类之外是不可访问的。它只能在派生类中访问
在主功能中写下以下代码。
Static Main()
{
Mammal objm= new Mammal();
objm.CallSee();
}
protected
访问修饰符只能从声明类或其子类中访问。。。只有public
和internal
使方法可以从外部访问