1

我想在我的自定义(PostSharp)属性上定义一个约束。我的目标是在编译时得到错误或警告,如果类X不实现Y接口但它具有我的属性。

所以这应该工作:

[MyAttributeOnlyForY]
public class X : Y { ... }

但这应该会破坏编译过程:

[MyAttributeOnlyForY]
public class X { ... }

这怎么可能?

原因

这个属性就像一个方面(这是 PostSharp属性),我想确保编织类为这个属性提供所有需要的信息。

我想避免结果

(eventArgs.Instance as ILoggerServiceOwner)

我认为合规时间检查是一种很好的做法。

解决方案

我在这里找到了一个完美的开始:Validating attribute usage with PostSharp Aspects

4

2 回答 2

1

我认为这是不可能的。更好的解决方案可能是在自定义属性构造函数上使用 Obsolete 属性来警告目标类应该实现接口 Y。

于 2010-02-09T22:50:11.480 回答
1

您可以使用 PostSharp 方法 CompileTimeValidate 并使用反射来检查类型是否具有派生类型。但是,在程序集中查找所有类型可能计算量很大。

于 2010-02-10T08:46:40.137 回答