class A
{
protected int i = 13;
}
class B : A
{
int i = 9;
public void fun() {
console.write(i);
}
}
从B类对象调用方法fun()
时,它会输出值9
如果我想访问i=13
中受保护的fun()
值,该怎么办?
当protected属性与派生类私有属性具有相同名称时,如何在派生类中访问基类的受保护属性?
答案 0 :(得分:3)
无论如何,这不是一个坏主意。但您可以尝试base.i
。
答案 1 :(得分:2)
使用base
关键字访问继承的类:
Console.Write(base.i);
(代码经过测试,它使用A类中的成员。)
答案 2 :(得分:2)
如果要从派生类中访问它,请尝试:
class B : A
{
public void fun()
{
Console.Write(base.i);
}
}
答案 3 :(得分:1)
Sana Tahseen,在基类和派生类中具有相同名称的类成员被认为是不好的做法,编译器将生成警告消息。我建议你避免这种做法,但如果你绝对需要这样做,那么你也应该在派生类的成员定义中使用new关键字:
class A
{
protected int i = 13;
}
class B : A
{
protected new int i = 9;
public void fun()
{
Console.Write(base.i);
}
}
但是,推荐的方法是不使用具有相同名称的成员。您可以在派生类的构造函数中更改继承的受保护成员字段的值:
class A
{
protected int i = 13;
}
class B : A
{
public B()
{
i = 9;
}
public void fun()
{
Console.Write(i);
}
}
答案 4 :(得分:0)
class A
{
protected int i = 13;
}
class B : A
{
int i = 9;
public void print_own_member() {
console.write(i);
}
public void print_base_class_member() {
console.write(base.i);
}
}
答案 5 :(得分:0)
B类中的变量i将变量i隐藏在A类中。它闻到了设计问题。 但是,如果你真的想从有趣的方法访问我,你可以这样做:
class A {
protected int i = 13;
};
class B : A {
int i = 9;
public void fun() {
console.write( "B's i == " + i );
console.write( "A's i == " + base.i );
}
}
答案 6 :(得分:0)
public class AcessBaseDataMember
{
public static void Main()
{
DerivedClass obj = new DerivedClass();
obj.Get_Base_DataMember();
obj.Get_Derived_DataMember();
Console.Read();
}
}
public class BaseClass
{
protected int i = 13;
}
public class DerivedClass:BaseClass { int i = 9; public void Get_Derived_DataMember() { Console.WriteLine(ⅰ); } public void Get_Base_DataMember() { Console.WriteLine(base.I出现); } }
答案 7 :(得分:0)
您应该使用base
关键字。
Console.Write(base.i); // It prints A class attribute i
检查这些链接
http://msdn.microsoft.com/en-us/library/ms173149.aspx
http://msdn.microsoft.com/en-us/library/ms173149(v=vs.80).aspx