我有一个来自供应商的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类。
感谢。
答案 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,就是这样