我寫自定義安全特性,得到了奇怪的編譯器行爲......當我在使用相同的文件屬性,默認參數值正常工作:這是一個C#4.0編譯器可選參數的bug嗎?
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) { }
}
我有一個編譯器錯誤:
Error: 'FooAttribute' does not contain a constructor that takes 0 arguments
出現這種情況只與CodeAccessSecurityAttribute
繼承人,看起來很奇怪...
源代碼中的FooAttribute與錯誤消息中的DebugCallTraceAttribute之間的關係是什麼? –
第二個代碼段中的「SecurityAttribute」和第二個代碼段中的CodeAccessSecurityAttribute是否有原因?似乎這些對於有效的最小測試用例應該是相同的。 (例如,它是與此更改相關還是與兩個文件或兩者兼而有之) – 2011-06-17 22:33:51
對不起,在莫斯科凌晨3點,所有片段錯誤都已修復 – ControlFlow