【发布时间】:2019-05-08 18:58:26
【问题描述】:
我没有找到问题的答案,但这似乎很简单。主要的大问题是我在 dll 中购买了一些库和一些硬编码的功能,如果没有源代码,我无法重新编译该 dll。所以这里是学校层面的问题:
我们有 2 类 A 和 B
class A {
public void Method1() {
this.Method2 ();
}
private void Method2() {
WriteLine ("A");
}
}
class B : A {
private void Method2() {
WriteLine ("B");
}
}
如果我们调用'new B().Method1()',那么我们有字符串行“A”。 我们不能对类 A 做任何事情,但我们可以改变类 B。我们应该得到字符串“B”。
我尝试使用“new”修饰符,但是,如您所知,它没有帮助。答案“也只是覆盖 Method1”不是选项,因为实际代码要大得多。
有什么建议吗?
【问题讨论】:
-
所以你不能改变A类也不能覆盖A.Method1?
-
如果无法修改
A使其成为protected virtual void Method2()...,则无法覆盖它。A对B一无所知,所以当您调用A.Method1()时,它总是会调用 itsMethod2,而不是派生类,因为它们截然不同。 -
您不能覆盖私有方法。如果你使用
A,你会得到它的私有方法的作用。我唯一可以建议的是使用像 Jetbrains DotPeek 这样的反编译器,它是免费的。它将反编译dll,甚至可以创建一个项目。源代码看起来有点滑稽,但你可以使用它来创建不同版本的类,或者只提取你想要保留的部分。 -
问题不清楚,似乎无法解释真正的问题
标签: c# inheritance polymorphism encapsulation method-hiding