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 编写派生类并添加一个新属性,但您不能覆盖Method2. Method2如果是虚拟的,这将是可能的。

于 2012-08-17T07:05:23.510 回答
1

您可以复制此 dll 的所有内容并将其粘贴到具有相同类名的新创建的类库中。然后,您可以根据需要对其进行修改。

于 2012-08-17T07:05:28.293 回答
0

不,您将只能扩展功能而不能更改现有功能。

于 2012-08-17T07:04:51.920 回答
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

如果从您的代码中调用 ClassA->Method1,您需要做的就是扩展 ClassA 和 ClassB 并添加您需要的方法。

于 2012-08-17T07:19:51.273 回答
-1

新建一个Class,继承自ClassB,新建一个Method2,关键字new,就这样

于 2012-08-17T07:22:52.833 回答