向虚拟方法添加自定义编译器警告
Add custom compiler warning to virtual method
我正在扩展我们公司的一个库,以便我的同事可以继承我们的 class 业务逻辑。这将要求他们能够覆盖某些方法。但是,我 运行 遇到了类似的问题,例如重写 Equals()
和 GetHashCode()
逻辑时。
Visual Studio 在您仅重写其中一个方法时发出编译器警告。如果我的同事忘记重写该方法,如果不同时重写其他方法,他会收到警告,使用它会非常好?
是否有可能(可能使用属性等)向 Visual Studio 中的 class 方法添加自定义编译器警告,仅覆盖一个方法可能会导致不一致的行为?
不,没有什么比这更具体的了。我认为你的选择是:
按照 Panagiotis Kanavos 的建议编写自定义分析器。该分析器可以特定于您的类型,也可以按照您的建议检测属性的存在。
我认为生成的分析器不会很复杂,但如果您从未使用过 Roslyn,学习如何编写它可能需要一些时间 API。
找出实现类似目的的不同编码模式。例如,您可以有一种类型,其中两种方法都是 abstract
(因此您必须覆盖两者),另一种类型是 sealed
(因此您不能覆盖它们)。
我不确定这种特定方法是否值得,但也许类似的方法值得考虑。
我正在扩展我们公司的一个库,以便我的同事可以继承我们的 class 业务逻辑。这将要求他们能够覆盖某些方法。但是,我 运行 遇到了类似的问题,例如重写 Equals()
和 GetHashCode()
逻辑时。
Visual Studio 在您仅重写其中一个方法时发出编译器警告。如果我的同事忘记重写该方法,如果不同时重写其他方法,他会收到警告,使用它会非常好?
是否有可能(可能使用属性等)向 Visual Studio 中的 class 方法添加自定义编译器警告,仅覆盖一个方法可能会导致不一致的行为?
不,没有什么比这更具体的了。我认为你的选择是:
按照 Panagiotis Kanavos 的建议编写自定义分析器。该分析器可以特定于您的类型,也可以按照您的建议检测属性的存在。
我认为生成的分析器不会很复杂,但如果您从未使用过 Roslyn,学习如何编写它可能需要一些时间 API。
找出实现类似目的的不同编码模式。例如,您可以有一种类型,其中两种方法都是
abstract
(因此您必须覆盖两者),另一种类型是sealed
(因此您不能覆盖它们)。我不确定这种特定方法是否值得,但也许类似的方法值得考虑。