2011-08-07 14 views
1

私はサードパーティのライブラリからクラスAを使用します。私はこの方法Mで私のクラスBを書いたどのようにこの継承の難しさを解決するには?

public class A 
{ 
    public int M(int x) 
    { 
     ... 
    } 
} 

::クラスはメソッドMあり

public class B : A 
{ 
    public void M(params int[] xs) 
    { 

    } 
} 

そしてクラスCに私は親クラスのメソッドMを呼び出したいをA

public class C : B 
{ 
    public void M2() 
    { 
     int result = M(1); 
    } 
} 

しかし、コンパイラはこの行をエラーとしてマークします。メソッドMのクラスBを使用して、voidを返します。
クラスBを書き直すことなくこの衝突を解決するにはどうすればよいですか?

+0

Bを書き換えたくない場合は、1つの整数からなる配列でメソッドを呼び出すことができます。その後、常にBのメソッドに解決されます –

答えて

6

私は((A)this).M(1)がお手伝いしますと思います。これらのメソッドがどこかで仮想/オーバーライドされていると、事態が変わる可能性があることに注意してください。

このように、私は、このような方法を隠すことは、設計上の選択肢が貧弱であることや、いくつかのハッカーを伝えるという悪い考えだと思います。私は本当にこれが必要なときに少なくとも私は方法を考え出すことができません。

+3

確かに。 B.MをA.Mと区別するために名前を変更する方が良いでしょう。 –

関連する問題