c#中受保护的属性

时间:2012-06-08 08:58:05

标签: c# protected

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属性与派生类私有属性具有相同名称时,如何在派生类中访问基类的受保护属性?

8 个答案:

答案 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