2012-06-08 2 views
2
class A 
{ 
    protected int i = 13; 
} 

class B : A 
{ 
    int i = 9; 

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

При вызове метода fun() из объекта класса B, он выводит значение 9.
Что делать, если я хотел, чтобы получить доступ к защищенному i=13 значение в fun().Защищенные атрибуты в C#

Когда защищенный атрибут имеет то же имя, что и частный атрибут производного класса, как получить доступ к защищенному атрибуту базового класса в производном классе?

ответ

3

В любом случае это было бы плохой идеей. Но вы можете попробовать base.i.

2

Используйте base ключевое слово, чтобы получить доступ к унаследованному классу:

Console.Write(base.i); 

(код проверяется, и он использует элемент в А классе.)

2

Если вы хотите получить доступ к нему из ваших производный класс, попробовать:

class B : A 
    { 
    public void fun() 
    { 
     Console.Write(base.i); 
    } 
    } 
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); 
    } 
} 
0

переменной я в классе B скрывается переменная 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);  
    } 
} 
1

Sana Тахсин, имеющие член класса с тем же именем в базе и в производном классе считаются плохой практикой и компилятор генерирует предупреждающее сообщение. Я предлагаю вам избежать подобной практики, но если вы абсолютно необходимо это сделать, то вы должны также использовать новое ключевое слово в определении члена в производном классе:

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); 
    } 
} 
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; public void Get_Derived_DataMember() { Console.WriteLine (i); } public void Get_Base_DataMember() { Console.WriteLine (base.i); } }

Смежные вопросы