想象一下我有以下东西:
public interface IMyInterface {
void DoSomething();
}
public class MyClass: IMyInterface {
public void DoSomething() {
// do something
}
}
然后,我要创建一个方法属性,如下所示:
[PSerializable]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodImplementationAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
throw new NullReferenceException();
}
}
现在,我知道可以将其应用于类方法。
但是,我希望能够执行以下操作:
public interface IMyInterface {
[NotNull]
void DoSomething();
}
然后,所有实现此方法的类都应用了拦截器。不幸的是,这在编译时给了我一个错误。
这可能吗?我试图在文档中找到答案,但没有成功。
如果这 是可能的,有人可以帮助我了解如何实现此目标吗?
答案 0 :(得分:1)
我能正常工作...
我在属性定义和抽象方法上都缺少属性。
工作示例:
[PSerializable]
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[AttributeUsage(AttributeTargets.Method)]
public class NotNullAttribute : MethodInterceptionAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
throw new NullReferenceException();
}
}
以及使用方法:
public interface IMyInterface {
[NotNull(AttributeInheritance = MulticastInheritance.Multicast)]
void DoSomething();
}
public class MyClass: IMyInterface {
public void DoSomething() {
// do something
}
}