我是C#的新手,我有一个非常奇怪的问题,下面是源代码:
namespace ConsoleApplication1
{
class Program
{
class B
{
protected int number = 11;
}
class A : B
{
}
static void Main(string[] args)
{
A a = new A();
int testA = a.number; //error inaccessable due to its protection level
B b = new B();
int testB = b.number; //error inaccessable due to its protection level
}
}
}
我不明白为什么派生类实例不能访问父母的受保护字段?最奇怪的部分是实例b怎么不能访问自己的字段?
答案 0 :(得分:1)
我不明白为什么派生类实例a无法访问父母的受保护字段? 和最奇怪的部分是实例b如何无法访问自己的字段?
B可以访问自己的字段,您正试图从A& A的外部访问受保护的字段。 B,在Program的Main()方法中。
了解c#访问说明符here。
protected关键字仅允许在类和从中继承的类中进行访问。如果要访问类层次结构之外的属性,则必须使用' public'或者'内部' (在同一个程序集中访问)
class Program
{
class B
{
private int privateNumber = 1;
protected int protectedNumber = 11;
public int publicNumber = 1;
public B()
{
privateNumber = 1; // Valid! - private to class B
}
}
class A : B
{
public A()
{
this.privateNumber = 2; // Invalid - private to class B and not accessible in derived class!
this.protectedNumber = 3; // Valid
}
}
static void Main(string[] args)
{
A a = new A();
int testA = a.protetedNumber; // Invalid
testA = a.publicNumber; // Valid since the field is public
}
}