是否可以限制屬性在特定類中應用的數量?C#屬性限制
Q
C#屬性限制
2
A
回答
3
在編譯時沒有。
在運行時你可以通過一個靜態初始化器來驗證它,如果這個不變量被違反,這個靜態初始化器將會拋出,儘管這會被認爲是非常糟糕的風格,它將是安全的,因爲在不變量不成立時不能執行代碼。
如果你對擴展固有的.Net,即使你可以在編譯時驗證這一點想象:
編譯DLL中的一個與
public class Foo
{
public int Property1 {get;}
}
編譯DLL乙引用A.DLL與
類public class Bar
{
[OnlyOneAllowedOnAnyPropertiesPerClass]
public int Property2 {get;}
}
然後重新編譯A.DLL與
public class Foo
{
[OnlyOneAllowedOnAnyPropertiesPerClass]
public int Property1 {get;}
}
並嘗試運行與老B.DLL這個新A.DLL(它們是二進制兼容的在所有其他方面,所以這是很好)
顯然,運行時會做很大的努力健全檢查這,不提及B可能會突然加載一段時間使A和B之一或兩者「非法」。
因此,您不應該期望這個功能在框架中可用。
1
我不認爲這是可能的在編譯時。但是你可以添加一些代碼給實例構造函數或者一個靜態構造函數,它在運行時通過反射來檢查它。
1
如果它是重要的(或右後)編譯的時候,你應該創建一個FxCop規則或爲您的屬性(模式像[OnlyOnceAttribute])自定義搜索。
findstr "[OnlyOnceAttribute]" *.cs
的FINDSTR實用程序將返回匹配的線。您只需要一個批處理文件來捕獲行數並且get back錯誤給調用者(= MSBuild任務),並且構建失敗。
+0
不錯的想法,但請注意,部分類和繼承都會顛覆這一點,並且文件中的多個類會導致誤報。 只要您有權訪問編譯後的總代碼庫,就可以使用正確的FxCop規則。 – ShuggyCoUk 2009-04-21 23:09:22
相關問題
- 1. XSD屬性限制
- 2. 限制基於屬性
- 3. 限制屬性值與XSD
- 4. 限制@RequestBody的JSON屬性
- 5. 限制類和類屬性
- 6. Java註釋屬性限制
- 7. 對象屬性限制 - jena
- 8. 在Rails中限制屬性
- 9. Protégé對象屬性限制
- 10. XSD屬性限制和值
- 11. 限制屬性類型
- 12. xsd限制和屬性
- 13. C#屬性的強制性屬性
- 14. vb.net C#屬性overiding機制
- 15. 限制對繼承屬性的訪問C#
- 16. C#通用屬性限制的解決方法
- 17. 限制屬性值子屬性(參考現有值)
- 18. 允許/限制基於其他屬性的XML屬性
- 19. 限制自定義屬性的屬性類型
- 20. 限制XML屬性不同屬性的/元素的值
- 21. XSD - 限制屬性值到另一個元素屬性值
- 22. 將屬性限制爲類或屬性可行嗎?
- 23. 限制屬性值取決於另一個屬性
- 24. 存儲在HTTPSession中的屬性限制
- 25. 限制JSON模式中的屬性
- 26. 限制多次使用的子屬性
- 27. 限制XML屬性的枚舉值
- 28. XSD.exe限制基類型屬性
- 29. XSLT複製受限於屬性值對
- 30. 通過多個屬性限制結果
號爲什麼你想這樣做? – 2011-05-23 03:19:32