C# 将接口实现拉入基类
我正在使用一个库,它要求我的视图实现一个接口,该接口只是一个依赖属性和get\set访问器。唯一的区别是DP的寄存器方法中的OwnerType。好吧,重复的代码是不好的,而且我在粘贴了几次之后忘记了更改OwnerType:)所以我想我应该尝试将其上移到基类中,让它确定类型。经过一番周折之后,我通过在构造函数中初始化它,并使用GetType()确定类型,使它开始工作。唯一的问题是当视图被销毁,并在以后重新创建时,这会导致DP已注册的ArgumentExceptionC# 将接口实现拉入基类,c#,refactoring,interface,C#,Refactoring,Interface,我正在使用一个库,它要求我的视图实现一个接口,该接口只是一个依赖属性和get\set访问器。唯一的区别是DP的寄存器方法中的OwnerType。好吧,重复的代码是不好的,而且我在粘贴了几次之后忘记了更改OwnerType:)所以我想我应该尝试将其上移到基类中,让它确定类型。经过一番周折之后,我通过在构造函数中初始化它,并使用GetType()确定类型,使它开始工作。唯一的问题是当视图被销毁,并在以后重新创建时,这会导致DP已注册的ArgumentException 这种重构是个好主意吗 我做得对
public interface IWorkSpaceAware
{
WorkspaceData WorkSpaceContextualData { get; set; }
}
找到的解决方案:
我将Register OwnerType更改为typeof(MyViewBase),并将赋值放回字段中。对我来说,这听起来像是一个很好的重构,尽管在每个类中都有一个简单的方法,而在超类中有一个稍微复杂的方法,两者之间存在权衡 我不明白的是,为什么在执行重构时行为会发生变化。当类的实例被销毁时,无论最初用于取消注册类的机制是什么,都应该继续工作;如果没有,那么探究为什么没有 什么是联合国登记机制?对于直接实现接口的类,能否在调试器中单步执行它?在重构过程中,库中发生的一些反射可能会导致失败;如果是这样,最简单的方法可能是向库作者报告bug,并恢复到重复代码方法,直到修复为止。关于粘贴OwnerType后忘记更改它的问题,也许您可以从OwnerType被注释掉、为空或无法编译的代码段中粘贴它,以迫使您快速修复它
public interface IWorkSpaceAware
{
WorkspaceData WorkSpaceContextualData { get; set; }
}