2
class A
{ 
    protected int i = 13; 
}

class B : A
{
    int i = 9;

    public void fun() {
        console.write(i);
    }
}

从 B 类对象调用方法fun()后,它会打印值 9。如果
我想访问. i=13fun()

当protected属性与派生类private属性同名时,如何在派生类中访问基类的protected属性?

4

8 回答 8

3

无论如何,这将是一个坏主意。不过你可以试试base.i

于 2012-06-08T09:01:52.823 回答
2

使用base关键字访问继承的类:

Console.Write(base.i);

(代码经过测试,它使用 A 类中的成员。)

于 2012-06-08T09:02:59.737 回答
2

如果您想从派生类中访问它,请尝试:

 class B : A
  {
    public void fun()
    {
      Console.Write(base.i);
    }
  }
于 2012-06-08T09:03:06.487 回答
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);
    }
}
于 2012-06-08T09:12:15.763 回答
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;
}

公共类 DerivedClass:BaseClass { int i = 9; 公共无效 Get_Derived_DataMember() { Console.WriteLine(i); } 公共无效 Get_Base_DataMember() { Console.WriteLine(base.i); } }

于 2012-06-08T09:18:07.063 回答
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);
    }
}
于 2012-06-08T09:03:29.470 回答
0

B 类中的变量 i 隐藏了 A 类中的变量 i。它闻起来是设计问题。但是,如果你真的想通过 fun 方法访问 i,你可以这样做:

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 );    
    }
}
于 2012-06-08T09:09:46.800 回答
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

于 2012-06-08T09:21:34.617 回答