我正在制作一个简单的C#控制台应用程序来测试继承,但是当我添加2个新类并继承另一个(Mammal:Animal)并在Program.cs类中创建一个哺乳动物对象时,我不知道
Program.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()
{}
}
Mammal.cs
class Mammal:Animal
{
public void hair()
{}
}
无法弄清楚它不允许的原因,因为受保护允许继承它们是否在其层次结构中。
答案 0 :(得分:3)
Mammals
中的代码可以访问Animals
的受保护成员,但只能通过Mammals
类型的表达式或子类型。
从外部这个类 - 我认为这是 - 无法访问受保护的成员。
从C#5规范的第3.5.3节(强调我的):
当在声明它的类的程序文本之外访问
protected
实例成员时,以及在程序的程序文本之外访问protected internal
实例成员时声明,访问必须在类声明中进行,该类声明派生自声明它的类。此外,访问需要通过该派生类类型的实例或从其构造的类类型进行。
(正如Jonathan Reinhart所说,顺便说一句,你几乎肯定希望这些类型被称为Mammal
和Animal
。)
答案 1 :(得分:1)
以下是在派生类
中访问受保护方法的方法 class Animal
{
protected void check()
{}
public void see()
{}
}
class Mammal:Animal
{
public void CallSee()
{
Animal obja = new Animal();
obja.see();
}
}
现在你可以创建类Mammal的实例并调用方法callSee,它将依次调用see的Animal方法。如上所述,答案建议检测到的成员在派生类之外是不可访问的。它只能在派生类
中访问在Main Function中写下代码。
Static Main()
{
Mammal objm= new Mammal();
objm.CallSee();
}
答案 2 :(得分:0)
protected
访问修饰符只能在声明类或其子类中访问...只有public
和internal
才能从外部访问方法