我在我的解决方案中使用了avalondock 2.0 dll,我需要在另一个项目中从DockingManager.cs更改String name;
do {
System.out.print("name: ");
name = scanner.nextLine();
if (!name.matches("[A-Za-z]+")) {
System.out.println("Wrong input, try again!");
}
} while
方法。
但是,我不想在源文件中执行此操作。该方法不是虚拟的,我不能像这样覆盖它
IOverlayWindowHost.GetDropAreas
答案 0 :(得分:2)
虽然一般情况下不推荐,但您可以使用C#功能显式重新实现接口的单个方法,例如
class CustomDockingManager : DockingManager, IOverlayWindowHost
{
IEnumerable<IDropArea> IOverlayWindowHost.GetDropAreas(LayoutFloatingWindowControl draggingWindow)
{
// ...
}
}
请注意,这种方式无法使用基本实现,您必须从头开始编写方法。
答案 1 :(得分:1)
您需要执行 IL weaving 来更改非虚拟方法。你在这里有很多选择。
Mono.Cecil。查看其他可能为您提供解决问题方法的问答:C# Intercept/change/redirect a method
PostSharp。如果您只想在某些方法执行之前和之后添加一些代码,PostSharp比手动发送中间语言更容易。您可以使用OnMethodBoundaryAspect
属性来执行此操作。请参阅此文章以与方法方面取得联系:http://www.postsharp.net/blog/post/Day-4-OnMethodBoundaryAspect