覆盖dll的方法

时间:2012-08-17 07:00:31

标签: c# inheritance override

我有一个来自供应商的c#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类。

感谢。

6 个答案:

答案 0 :(得分:3)

不,这是不可能的,因为Method2已被封存。您可以从B编写派生类并添加新属性但不能覆盖Method2。如果Method2是虚拟的,那么这是可能的。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分: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

实现

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

创建一个继承自ClassB的新类,使用关键字new创建一个新的Method2,就是这样