C# 是否可以重写dll文件中类中的方法?

C# 是否可以重写dll文件中类中的方法?,c#,oop,C#,Oop,我已经在我的windows窗体项目中包含了一个dll文件。 1.是否可以完全重写特定的类? 2.是否可以向dll文件中的特定类添加新方法? 3.是否可以重写dll中类中的方法 我希望避免的备选方案: 我知道我可以使用扩展方法来创建静态的新方法。 我还可以从特定类继承,然后向派生类添加新方法 我正在努力实现的目标: 我现在必须创建一个项目,并将其作为dll文件添加到一个更大的项目中。 但有人告诉我们,下个月我们需要在原来的项目中添加更多功能。我在想最好的办法。 较小的项目基于mvc设计。您当然可以

我已经在我的windows窗体项目中包含了一个dll文件。 1.是否可以完全重写特定的类? 2.是否可以向dll文件中的特定类添加新方法? 3.是否可以重写dll中类中的方法

我希望避免的备选方案: 我知道我可以使用扩展方法来创建静态的新方法。 我还可以从特定类继承,然后向派生类添加新方法

我正在努力实现的目标: 我现在必须创建一个项目,并将其作为dll文件添加到一个更大的项目中。 但有人告诉我们,下个月我们需要在原来的项目中添加更多功能。我在想最好的办法。
较小的项目基于mvc设计。

您当然可以重写从类库中的类继承的虚拟方法。例如,您可以在任何时候重写
object.ToString()
时执行此操作

但你不能“完全重写一个类”,我甚至不知道这意味着什么。同样,您不能将方法添加到现有类中,尽管您可以:

  • 使用扩展方法“假装”添加另一个方法(但没有状态,也没有属性)
  • 从类派生(假设它未密封)并声明自己的额外方法
如果你能告诉我们你正在努力实现什么,就更容易就如何继续向你提供建议

编辑:当您需要向原始项目添加更多功能时,只需将其添加到原始项目即可。你有什么理由以后不能改变那个项目吗

我想要达到的是:我必须做到 立即创建项目并将其添加到 作为dll文件的较大项目。但是 我们被告知,我们需要添加 更多的功能,以原来的 下个月的项目。我正在努力 找出最好的方法 这较小的项目基于 mvc设计


当前的最佳实践是对这类事情使用控制反转(例如),如果您对所有依赖项都有一个中心位置,那么您可以在运行时以自己喜欢的方式将它们连接起来,根据自己的意愿截取零碎的部分

实际上,您可以使用ICorProfiler和许多令人头痛的问题“完全重写类”。某些内容也可以用ICorDebug@Sam-您是否真的建议某人在运行其生产应用程序时,将某些内容附加到分析或调试API?你总是可以用足够的时间和精力去做一些事情,但我认为假设Jon的意思是你不能以任何理智的方式来做这件事是安全的。你也可以用postsharp的加载器来编织东西,这样就不那么痛苦了。有些问题需要编织,例如,如果您试图分析SqlClient的一些部分,以便获得SQL调用的堆栈跟踪。当然,这是一个雷区,不像Ruby alias_方法那样性感。我发现:程序的基本功能必须在其基础上进行更改。那是没有办法的。继承类允许您将子类与实现相同接口的另一个子类交换。对我来说,整个问题的出现是因为我使用的是sql数据库,显然在OO代码中几乎不可能对其进行建模。如果有一种方法可以拦截方法调用,运行另一种方法并将值返回给原始调用方法,那么是的,我想知道如何实现。您试图覆盖哪个类?如果是Namespace1.dll中的类Namespace1.Class1,那么只需从头重写Namespace1.Class1,并放入Namespace1.dll,然后使用反射截获其他调用,并通过后端传递它们。