我无法在我的派生类中访问i
。 m.i
无效。为什么呢?
public class MyClass
{
protected int i;
public MyClass()
{
}
public virtual void Display()
{
Console.WriteLine("Base dis");
}
}
public class MyCla : MyClass
{
public MyCla()
{
}
int ij = 12;
public new void Display()
{
MyClass m = new MyClass();
// m.i is inaccessible here
Console.WriteLine("Derived dis");
}
}
答案 0 :(得分:4)
这是因为protected
变量和属性仅可用于派生类中的派生类(因此可以通过this
引用它),以及当前类的实例(如果{{ 1}} m
它会起作用。)
MyCla
如果您愿意,可以选择创建字段MyCla m = new MyCla();
int x = m.i;
或internal
,这样就可以使程序集中的所有类都可以使用。
答案 1 :(得分:0)
“protected”关键字表示只有从该类型派生的类型和类型才能访问该成员。
如果您希望能够访问该成员,您有几个选择
干杯!
答案 2 :(得分:0)
您正在创建一个新实例:
MyClass m = new MyClass();
此实例仅允许您与公共成员进行交互。因此m.i无法正常工作。
在派生类MyCla类中,您可以访问受保护的字段。
e.g
public new void Display()
{
i = 1; //this will work
}
答案 3 :(得分:0)
您无法在子类中获取受保护的变量,但可以在Child Class方法或Constructor中直接访问,例如。的 base.I出现强>
public class MyCla : MyClass
{
public MyCla()
{
base.i=100;
}
int ij = 12;
public new void Display()
{
MyClass m = new MyClass();
base.i=100; // Accessible
m.i = 100; // Not Accessible
Console.WriteLine("Derived dis");
}
}
如果你想让对象可以访问该变量,那么将它公开。
public int i;
public MyClass()
{
}
public class MyCla : MyClass
{
public MyCla()
{
}
int ij = 12;
public new void Display()
{
MyClass m = new MyClass();
m.i = 100; // accessible
Console.WriteLine("Derived dis");
}
}
由于
答案 4 :(得分:-1)
您可以从MyCla类中访问i,但在您的方法“显示”中,您正在创建一个新的MyClass对象,因此它完全与MyCla无关。
以下是如何访问变量“i”的代码示例:
public class MyClass
{
protected int i;
public MyClass()
{
}
public virtual void Display()
{
Console.WriteLine("Base dis");
}
}
public class MyCla : MyClass
{
public MyCla()
{
}
int ij = 12;
public new void Display()
{
Console.WriteLine(this.i);
}
}