2012-08-17 34 views
1

我有一个来自供应商的C#DLL。我已经提取了源代码,但它不是我自己修改它的选项。重写DLL的方法

Supose的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.

谢谢。

+0

看看适配器模式。 – Tomtom 2012-08-17 09:24:58

回答

0

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

3

不,这是不可能的,因为Method2是密封的。您可以从B编写派生类并添加新属性,但无法覆盖Method2。如果Method2是虚拟的,这将是可能的。

+0

不,方法2不密封(在他的例子中) – shajivk 2012-08-17 07:10:10

+2

当然,它是密封的。 B类没有实现任何接口,并且该方法没有用虚拟关键字标记。 – 2012-08-17 07:10:40

1

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

0

这个人为什么说这是不可能的?我错过了什么吗? 做一个派生类,添加属性,用“新”重写方法

public class C : B 
{ 
    //add property here 

    public new string Method2() 
    { 

    } 
} 

那么让我们来看看有什么我们正在这里:

如果您不需要使用添加的属性中方法一(这个时刻是不是从你的问题很清楚):

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. 

但是,如果你需要改变执行方法1的使用你的财产,你可以尝试做这样:

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

    } 
} 

,写自己的实现方法一

+1

而'Method1'不会调用它,因为他接受'B'作为参数,并且会忽略这个伪覆盖。 – 2012-08-17 07:09:45

+0

如何阻止他编写另一个使用他的类的实例作为选项的扩展方法? – dantix 2012-08-17 07:17:00

+0

那么,据我看到,OP希望类'A'使用他的类'B'版本,而不需要自己实现所有的代码。 – 2012-08-17 07:19:27

0

。如果ClassA->方法1是从你的代码中调用,所有你需要做的是延长ClassA和ClassB的并添加您需要的方法。

+0

不,他说他使用的是A类_Class A没有问题。这是我们使用的类 – shajivk 2012-08-17 07:22:03

-1

创建一个新的类,从ClassB的继承,创建一个新的方法2与关键字新的,这就是它