我在C#项目中使用Fody.PropertyChanged和Fody.Validar,以避免编写样板代码。假设我有一些A类:
[AddINotifyPropertyChanged]
[InjectValidation]
public class A { }
我必须在代码的其他部分中使用类型A的对象,这些对象需要类型A来实现INotifyPropertyChanged或INotifyDataErrorInfo之类的接口。有两种已知的方法:
[AddINotifyPropertyChanged]
[InjectValidation]
public class A: INotifyPropertyChanged, INotifyDataErrorInfo { ... }
public static T DoSomething<T>(T arg) where T: INotifyPropertyChanged { ... }
var a = new A();
var b = DoSomething((INotifyPropertyChanged) a) // Returns INotifyPropertyChanged.
有没有办法“告诉” IntelliSense和编译器该类实现了该接口而不实际实现该接口,而让Fody做到了呢?
[AddINotifyPropertyChanged]
[InjectValidation]
[Implements(typeof(INotifyPropertyChanged))]
public class A { }
var a = new A();
var b = DoSomething(a) // Returns A.
答案 0 :(得分:1)
您到底想从编译器中得到什么?为什么?
它不知道,将在编译后添加什么。因此,您正在寻求一种打破编译器规则之一的方法,以使某些强制转换不会显得阴暗。没有干净的方法。
强制转换操作是您唯一的方法。除了您自己,没人知道某个类会突然实现某些东西,而不管它在编译时的作用如何。
如果他们太担心您,可以关闭ReSharper规则。