15

これが可能かどうかはわかりませんが、派生クラスから基本クラスのインスタンスを取得しようとしています。C# では、baseキーワードを使用して基本クラスのプロパティとメソッドにアクセスできますが (もちろん)、 base自体を使用したいと考えています。そうしようとすると、「キーワード 'base' の使用は、このコンテキストでは無効です」というエラーが発生します。

サンプルコード

public class SuperParent
{
    public int SPID;

    public SuperParent()
    {
    }
}

public class SubChild : SuperParent
{
    public SubChild(int pSPID)
    {
        base.SPID = pSPID;
    }

    public int BaseSPID
    {
        get
        {
            SuperParent sp = base;
            return sp.SPID;
        }
    }
}
4

7 に答える 7

4

質問のコードを提供していませんが、次のようなものが必要だと思われます

class Base
{
    public virtual void Foo()
    {
        Console.WriteLine("base");
    }
}

class Derived : Base
{
    public override void Foo()
    {
        Console.WriteLine("derived");
    }

    //// bad
    //public Base MyBase
    //{
    //    get
    //    {
    //        return base; // Use of keyword 'base' is not valid in this context
    //    }
    //}

    // work but...
    public Base MyBase
    {
        get
        {
            return (Base)this;
        }
    }
}

MyBaseしかし、それは本当にタイプであることを覚えておいてくださいDerived

new Derived().MyBase.Foo(); // output "derived"
于 2013-10-08T09:01:47.977 に答える
0

ポイント1:子クラス内に基底クラスのインスタンスを作成するよりも価値がない。子でアクセス可能なパブリックなものが既にあります。

ポイント2:子クラスを初期化して、基本クラスの「インスタンス」を取得したい場合、初期化されていない場合、どうすればそれを取得できますか(基本クラスのインスタンスが物理メモリに存在せず、子クラスだけがあるため)そこにインスタンス)?

于 2013-10-08T10:12:46.293 に答える
0

派生インスタンスは基本インスタンスです。これは、メモリ内の 1 つのオブジェクト インスタンスにすぎません。

例:

public class A : B 
{
}

var thing = new A();

thingは のインスタンスであり、 のAインスタンスでもありますB
たとえば、次の行を書くことができます。
B thing2 = thing;

于 2013-10-08T08:55:30.637 に答える
-1
 class Parent
 {
      private Parent _parent;
      public Parent()
      {
         _parent = this;
      }

     protected Parent GetParent()
     {
         return _parent;
     }
 }

class Child : Parent
{
    private Parent _parent;
    public Child()
    {
        _parent = base.GetParent();
    }
}
于 2016-06-05T09:56:56.720 に答える