1

サプライヤから ac# dll があります。ソースコードを抽出しましたが、自分で変更することはできません。

dll に次のクラスがあるとします (同じ名前空間に):

public static class A {
   public static string Method1(this Helper helper, B options) {
      ...
   }
}

public class B {
   public int LoadingElementDuration {
      get;
      set;
   }

   public string Method2() {
      ...
   }
}

Aクラスは大丈夫です。これは私たちが使用するクラスです。クラスBの変更は可能ですか?プロパティを追加し、独自のコードで Method2 をオーバーライドしたいと考えています。クラス A は、デフォルトのクラス B の代わりに私のコードを使用する必要があります。

ありがとう。

4

6 に答える 6

3

いいえ、Method2封印されているため、それはできません。B から派生クラスを作成し、新しいプロパティを追加することもできますが、オーバーライドすることはできませんMethod2Method2これは、仮想化されていれば可能でした。

于 2012-08-17T07:05:23.510 に答える
1

この dll のすべての内容をコピーして、同じクラス名で新しく作成されたクラス ライブラリに貼り付けることができます。その後、必要に応じて変更できます。

于 2012-08-17T07:05:28.293 に答える
0

ClassA-> Method1がコードから呼び出された場合、必要なのはClassAとClassBを拡張し、必要なメソッドを追加することだけです。

于 2012-08-17T07:19:51.273 に答える
0

なぜこの人々はそれが不可能だと言っているのですか?何か不足していますか?派生クラスを作成し、プロパティを追加し、「new」を使用してメソッドをオーバーライドします

public class C : B
{
    //add property here

    public new string Method2()
    {

    }
}

それでは、ここで得られるものを見てみましょう。

Method1 で追加されたプロパティを使用する必要がない場合 (この瞬間はあなたの質問からは明確ではありません):

C options = new C();
//init here
helper.Method1(options); //this will cast your object of C class to object of B class and your added property will be inaccessible.

ただし、プロパティを使用するために Method1 の実装を変更する必要がある場合は、次の方法を試すことができます。

public static class CHelper
{
     public static string Method1(this Helper helper, C options)
     {

     }
}

Method1 の独自の実装を記述します。

于 2012-08-17T07:08:25.643 に答える
0

いいえ、機能を拡張することしかできず、既存のものを変更することはできません。

于 2012-08-17T07:04:51.920 に答える
-1

ClassB から継承された新しい Class を作成し、キーワード new を使用して新しい Method2 を作成します。

于 2012-08-17T07:22:52.833 に答える