我在我的 C# 项目中使用 Fody.PropertyChanged 和 Fody.Validar 以避免编写样板代码。假设我有一些 A 类:
[AddINotifyPropertyChanged]
[InjectValidation]
public class A { }
我必须在代码的其他部分使用 A 类型的对象,这些部分需要 A 类型来实现 INotifyPropertyChanged 或 INotifyDataErrorInfo 等接口。有两种已知的方法可以做到这一点:
- 手动实现接口(很多样板文件):
[AddINotifyPropertyChanged]
[InjectValidation]
public class A: INotifyPropertyChanged, INotifyDataErrorInfo { ... }
- 将类型 A 的对象转换为所需的接口(更多代码,ReSharper 会生成有关可疑转换的警告,泛型方法可能会中断):
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.