从dll C#更改方法
本文关键字:方法 dll | 更新日期: 2023-09-27 18:28:12
我在解决方案中使用了avalondock 2.0 dll,我需要在另一个项目中从DockingManager.cs更改IOverlayWindowHost.GetDropAreas
方法。但是,我不想在源文件中执行此操作。这个方法不是虚拟的,我不能像这个那样覆盖它
class CustomDockingManager : DockingManager
{
override IEnumerable<IDropArea> GetDropAreas(LayoutFloatingWindowControl draggingWindow)
{
//some changes
}
}
虽然一般不推荐使用,但您可以使用C#功能显式地重新实现接口的单个方法,如
class CustomDockingManager : DockingManager, IOverlayWindowHost
{
IEnumerable<IDropArea> IOverlayWindowHost.GetDropAreas(LayoutFloatingWindowControl draggingWindow)
{
// ...
}
}
请注意,这样就不能使用基本实现,必须从头开始编写方法。
您需要执行IL编织来更改非虚拟方法。你有很多选择。
-
Mono.ecil.检查这个其他问答;A可能会给你一些解决问题的方向:C#拦截/更改/重定向方法
-
PostSharp。如果您只想在执行某些方法之前和之后添加一些代码,PostSharp比手动发出中间语言更容易。您可以使用
OnMethodBoundaryAspect
属性来执行此操作。请参阅本文以了解方法方面:http://www.postsharp.net/blog/post/Day-4-OnMethodBoundaryAspect