1

我在我的 C# 项目中使用 Fody.PropertyChanged 和 Fody.Validar 以避免编写样板代码。假设我有一些 A 类:

[AddINotifyPropertyChanged]
[InjectValidation]
public class A { }

我必须在代码的其他部分使用 A 类型的对象,这些部分需要 A 类型来实现 INotifyPropertyChanged 或 INotifyDataErrorInfo 等接口。有两种已知的方法可以做到这一点:

  1. 手动实现接口(很多样板文件):
[AddINotifyPropertyChanged]
[InjectValidation]
public class A: INotifyPropertyChanged, INotifyDataErrorInfo { ... }
  1. 将类型 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.
4

1 回答 1

2

究竟是什么,为什么你想要从编译器?

不知道编译后要添加什么。所以你在寻求一种方法来打破编译器的规则之一,这样一些演员表就不会显得阴暗。没有干净的方法可以做到这一点。

演员阵容是你唯一的方法。除了你之外没有人知道某个类会突然实现某些东西,不管它在编译时做了什么。

如果您太担心 ReSharper 规则,可以关闭它们。

于 2019-05-24T11:04:42.363 回答