2
class A
{ 
    protected int i = 13; 
}

class B : A
{
    int i = 9;

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

fun()クラスBオブジェクトからメソッドを呼び出すと、値9が出力されます。の保護された値に
アクセスしたい場合はどうなりますか。 i=13fun()

保護された属性が派生クラスのプライベート属性と同じ名前である場合、派生クラス内の基本クラスの保護された属性にアクセスするにはどうすればよいですか?

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は、ベースクラスと派生クラスに同じ名前のクラスメンバーがあることは悪い習慣と見なされ、コンパイラーは警告メッセージを生成します。このような方法は避けることをお勧めしますが、どうしてもこれを行う必要がある場合は、派生クラスのメンバーの定義でn​​ewキーワードも使用する必要があります。

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
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を隠しています。これは、設計上の問題の匂いがします。しかし、本当に楽しい方法から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
 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(i); } public void Get_Base_DataMember(){Console.WriteLine(base.i); }}

于 2012-06-08T09:18:07.063 に答える
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 に答える