2

これがC#でまったく可能かどうか疑問に思います:

ClassA c = new ClassB();

右側の部分にクラス名を付ける必要がある理由がわかりましたが、左側の部分にはクラス名を付ける必要はありません ( var c = new Anything())。この式の左右に異なる (おそらく何らかの形で接続されている) クラスの名前を明示的に入力します。私が間違っている?

4

3 に答える 3

2

演算子のオーバーロードによっても可能です。

class A
{
}

class B
{
    public static implicit operator A(B b)
    {
        return new A();
    }
}

A a = new B();

また

class A
{
    public static implicit operator A(B b)
    {
        return new A();
    }
}

class B
{
}

A a = new B();

これらは暗黙の変換です。

それらはポリモーフィズムに関連していないことに注意してください。それらは完全に分離されています (正反対ではなく、直交しています!)

于 2013-08-17T08:34:25.867 に答える
1

そのように宣言する目的は、で宣言することと同じです

ISomeInterface x=new ClassThatImplementsSomeInterface();

それは、新しいクラスが提供しなければならない余分なものをすべて隠し、インターフェイス メソッドのみを使用してオブジェクト インスタンスと「対話」することです。

のベースClassAである必要がありClassBます。

編集:

ほとんどの文献では、派生は英語ではISとして語られ、次のように書き留められることがわかります。

 ClassB *IS* ClassA
 ClassThatImplementsSomeInterface *IS* ISomeInterface

このように、宣言/割り当ては完全に正しいです。

于 2013-08-17T08:34:08.007 に答える