我使用继承几乎没有问题。受保护时,我既不能更改C类中first和second的值,也不能更改B类中first的值。如果这些变量是公共变量,那么一切正常,但是在这种情况下,使用protected有什么意义?
class A
{
protected int first { get; set; }
}
class B : A
{
protected int second { get; set; }
public Show()
{
A a = new A();
a.first = 5;
}
}
class C : B
{
private int third { get; set; }
static void Main()
{
B b = new B();
b.first = 1;
b.second = 2;
}
}
主要问题仅是由于将程序的入口点放在要测试的类中而引起的。因为Main()
是静态的,所以您无法访问C
的(继承的)实例成员。
因此分开:
class Program
{
static void Main()
{
C c = new C();
c.Test();
}
}
您的类C
继承自B
,因此C
可以像这样访问B
的受保护成员:
class C : B
{
private int third { get; set; }
public void Test()
{
first = 1; // from A
second = 2; // from B
third = 3; // from C
}
}
通过new
内的B
,C
和B
的实例之间没有关系,因此您可以访问的只有C
的B
和public
成员。
当您处理自己的类的实例时,您可以访问受保护的成员:
internal
如果允许您在基类的any实例上任意访问基类的class B :A
{
protected int second { get; set; }
public show() {
this.first = 5; //This is valid
}
}
成员,则将允许此操作:
protected
这对class DDefinitelyNotB : A
{
}
class B :A
{
protected int second { get; set; }
public show() {
A a = new DDefinitelyNotB ();
a.first = 5;
}
}
可能是不好的,它不希望刚从DDefinitelyNotB
派生的other类能够干扰它从A
继承的protected
成员。