【发布时间】:2011-06-17 22:29:21
【问题描述】:
我正在编写自定义安全属性并得到奇怪的编译器行为...当我在同一个文件中使用该属性时,默认参数值可以正常工作:
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; }
}
还有文件 2:
[Foo] class Program {
static void Main(string[] args) { }
}
我遇到了编译器错误:
错误: 'Foo属性' 不包含构造函数 接受 0 个参数
这种情况只发生在CodeAccessSecurityAttribute的继承者身上,看起来很奇怪...
【问题讨论】:
-
源码中的FooAttribute和报错信息中的DebugCallTraceAttribute是什么关系?
-
第一个sn-p中的
SecurityAttribute和第二个sn-p中的CodeAccessSecurityAttribute是否有原因?对于有效的最小测试用例,似乎这些应该是相同的。 (例如,它与此更改有关还是在两个文件中或两者兼而有之?) -
抱歉,莫斯科凌晨 3 点,所有 sn-p 错误都已修复
-
非常酷的错误。如果 Eric 没有出现,请在 connect.microsoft.com 上发布。请张贴链接,很想知道这是怎么回事。您需要修复编译器错误 sn -p btw,它与您的代码不匹配。
标签: c# c#-4.0 attributes optional-parameters