-3
public class Base
{
    public virtual void SomeOtherMethod()
    {
    }
}


public class Derived : Base
{
    public new void SomeOtherMethod1()
    {
    }
}

**Base b = new Derived();

Derived d = new Derived();

Derived d=new Base();**

上記の 3 行のオブジェクトのインスタンス化を理解できませんか?派生クラスの場合にオブジェクトをインスタンス化する方法の概念について少し混乱しています。これらの概念について誰か助けてもらえますか?

等号の左部分と右部分が混同されていますか?

4

1 に答える 1

1

これを変える:

public new void SomeOtherMethod1()

...と:

public override void SomeOtherMethod1()

これは、実際のポリモーフィズム (基本メンバーの実装の変更) が必要な場合です。

その他の路線について

これはアップキャストとして知られています。は を継承するためタイプDerivedであるため、より具体的なインスタンスをより具体的でない参照にアップキャストできます。BaseBase

Base b = new Derived()

もう 1 つの行はdowncastです。アップキャストと同じ理由で、インスタンスをダウンキャストして、より具体的な型付き参照に格納することができます。

問題は、あなたの場合、継承しないため、Base決して型にならないことです。しかし、次のダウンキャストを行うことができます:DerivedBaseDerived

Base base = new Derived(); // This is an upcast again
Derived derived = (Derived)base; // Using an explicit downcast to Derived! 
于 2013-03-01T13:55:10.880 に答える