C# dll的重写方法

C# dll的重写方法,c#,inheritance,overriding,C#,Inheritance,Overriding,我有一个供应商提供的c#dll。我已经提取了源代码,但不能自己修改 假设dll具有以下类(在同一命名空间中): A班都很好。这是我们使用的类。 可以修改B类吗?我想添加一个属性并用自己的代码重写Method2。然后,类A应该使用我的代码,而不是默认的类B 谢谢。否,您只能扩展功能,不能更改现有功能。否,这是不可能的,因为Method2是密封的。您可以从B编写派生类并添加新属性,但不能重写Method2。如果Method2是虚拟的,这是可能的。您可以复制此dll的所有内容,并将其粘贴到具有相同类名

我有一个供应商提供的c#dll。我已经提取了源代码,但不能自己修改

假设dll具有以下类(在同一命名空间中):

A班都很好。这是我们使用的类。 可以修改B类吗?我想添加一个属性并用自己的代码重写Method2。然后,类A应该使用我的代码,而不是默认的类B


谢谢。

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

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

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

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

public class C : B
{
    //add property here

    public new string Method2()
    {

    }
}
所以让我们来看看我们现在的情况:

如果您不需要在Method1中使用added属性(您的问题并不清楚这一点):

但如果您需要更改Method1的实现以使用您的属性,您可以尝试以下方法:

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

     }
}

并编写自己的Method1实现

如果从代码中调用ClassA->Method1,则只需扩展ClassA和ClassB并添加所需的方法。

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

Method1
不会调用它,因为他接受
B
作为参数,并且会忽略这个伪重写。这将如何阻止他编写另一个使用类实例作为选项的扩展方法呢?好吧,据我所知,OP希望class
A
使用他版本的class
B
,我不知道所有的背景,OP不会显示它,但是如果你添加了一些属性,你会想使用它。如果要在Method2中使用此属性,则无需更改Method1。如果没有-他应该使用这个新属性编写自己的实现,否则我认为没有必要添加它。也许更适合描述backgound。dll属于asp.net mvc。A类是AjaxExtensions,B类是AjaxOptions。我想向ajaxoptions添加一个属性:private string\u updateTargetSelector;然后我想重写方法“ToUnobtrusiveHtmlAttributes”。所以我最终可以用我的新AjaxOption调用AjaxLink,当然它是密封的。B类没有实现任何接口,方法也没有用virtual关键字标记。不,他说他使用的是A类。A类都很好。这是我们使用的类。请查看适配器模式。
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.
public static class CHelper
{
     public static string Method1(this Helper helper, C options)
     {

     }
}