如何从派生类获取基类实例

One*_*rce 13 .net c# inheritance base-class derived-class

我不知道这是否可行,但我试图从Derived Class中获取Base Class实例.在C#中,我可以使用base关键字来访问Base Class的属性和方法(当然),但我想使用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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ten 17

如果您正在使用派生类的实例,则没有base instance.一个例子:

class A
{
    public void Foo() { ... }
}

class B : A
{
    public void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)

什么是不可能的B:

public void Bar()
{
    // Use of keyword base not valid in this context
    var baseOfThis = base; 
}
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

public void Bar()
{
    base.Foo();
}
Run Code Online (Sandbox Code Playgroud)

你可以添加另一种方法

public A GetBase()
{
    return (A)this;
}
Run Code Online (Sandbox Code Playgroud)

然后就可以了

public void Bar()
{ 
    var baseOfThis = GetBase();
    // equal to:
    baseOfThis = (A)this;
}
Run Code Online (Sandbox Code Playgroud)

所以这种GetBase()方法可能就是你想要的.

重点是:如果你有一个实例B,它继承了所有属性和非重写行为A,但它不包含一个实例,B其中包含一个(隐藏但自动)的实例引用A.您可以将B实例转换为A,但它仍然是一个实例B.