我正在编写自定义安全属性并遇到了奇怪的编译器行为...当我在同一文件中使用该属性时,缺省参数值可以正常工作:
using System.Security.Permissions;
[System.Serializable]
sealed class FooAttribute : CodeAccessSecurityAttribute {
public FooAttribute(SecurityAction action = SecurityAction.Demand) : base(action) { }
public override System.Security.IPermission CreatePermission() { return null; }
}
[Foo] class Program {
static void Main(string[] args) { }
}
但是当我将上述代码分成两个文件,如下所示 - 文件1:
using System.Security.Permissions;
[System.Serializable]
sealed class FooAttribute : CodeAccessSecurityAttribute {
public FooAttribute(SecurityAction action = SecurityAction.Demand) : base(action) { }
public override System.Security.IPermission CreatePermission() { return null; }
}
还有第二个文件:
[Foo] class Program {
static void Main(string[] args) { }
}
我遇到了一个编译器错误:
错误: 'FooAttribute' 不包含任何接受0个参数的构造函数
只有在使用继承自CodeAccessSecurityAttribute
的属性时才会出现这种情况,看起来非常奇怪...
SecurityAttribute
,第二个片段中使用CodeAccessSecurityAttribute
,这是有原因的吗?对于有效的最小测试用例来说,它们似乎应该是相同的。(例如,它是否与此更改相关或者与在两个文件中有关或者两者都有关?) - user166390