C# 仅在特定类上使用自定义属性

C# 仅在特定类上使用自定义属性,c#,.net-3.5,attributes,postsharp,C#,.net 3.5,Attributes,Postsharp,我想定义自定义(PostSharp)属性的解释。我的目标是在编译时得到错误或警告,如果类X没有实现Y接口,但它有我的属性 因此,这应该是可行的: [MyAttributeOnlyForY] public class X : Y { ... } 但这会破坏编译过程: [MyAttributeOnlyForY] public class X { ... } 怎么可能呢 原因 该属性的工作方式类似于一个方面(这是PostSharp),我想确保weaved类提供了该属性所需的所有信息 我希望避免在上

我想定义自定义(PostSharp)属性的解释。我的目标是在编译时得到错误或警告,如果类X没有实现Y接口,但它有我的属性

因此,这应该是可行的:

[MyAttributeOnlyForY]
public class X : Y { ... }
但这会破坏编译过程:

[MyAttributeOnlyForY]
public class X { ... }
怎么可能呢

原因

该属性的工作方式类似于一个方面(这是PostSharp),我想确保weaved类提供了该属性所需的所有信息

我希望避免在上出现空结果

(eventArgs.Instance as ILoggerServiceOwner)
而且我认为康普利时间检查是一个很好的实践

解决方案


我在这里找到了一个完美的开始:

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

您可以使用PostSharp方法CompileTimeValidate并使用反射来检查类型是否具有派生类型。但是,查找部件中的所有类型可能会花费大量的计算费用。

下面是一些想法: