回答
謝謝Porges。
我的錯誤是,我實際使用ReleaseRequires
選項,這,的確,只有涉及通用版本的方法,Requires<T>
的。
置於自動執行屬性上的不變量是確實變成了Requires
前提條件,但它不是通用的 - 這就是爲什麼它不能使用此選項。
怎麼辦:
VARIANT 1.考慮使用代碼段和可愛
Requires<T>
,而不是自動實現的屬性 - 這使我們能夠使用所需類型的異常。VARIANT 2. 更改代碼契約的選項的
ReleaseRequires
到Preconditions
和隨意寫上自動性能不變 - 重寫器工具會自動改變他們進入Requires
。但是,它們將是非通用的 - 這意味着,如果合同被破壞,將會引發ContractException
,並且無法更改此行爲。
謝謝大家的幫助!
我想不會,但你可以很容易地編寫代碼,可將做到這一點。如果你走這條路線,here is a free snippet editor這將使任務非常容易。
是的,這是可能的 - 所有這一切都需要的是你的合同條件添加到[ContractInvariantMethod]
方法在你的類,然後添加相當於Requires
前提,以自動set
之三,和一個後置條件Ensures
被添加到get
。從的Reference
作爲示例示出第2.3.1節,在自動性質不變量變成:
- 甲前提條件設置器
- 一種用於吸氣劑的後置條件
- 的不變的基礎支持領域
並通過例如:
public int MyProperty { get; private set ;}
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant (this.MyProperty >= 0);
}
「等同於下面的代碼:」
private int backingFieldForMyProperty;
public int MyProperty
{
get
{
Contract.Ensures(Contract.Result<int>() >= 0);
return this.backingFieldForMyProperty;
}
private set
{
Contract.Requires(value >= 0);
this.backingFieldForMyProperty = value;
}
}
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant (this.backingFieldForMyProperty >= 0);
...
這太棒了! – flakes 2017-10-15 01:05:10
- 1. 自動實現的屬性
- 2. CA2213代碼分析規則和自動實現的屬性
- 3. 屬性和自動實現
- 4. 使用自動實現的屬性或由我們自己實現屬性
- 5. 自動實現的屬性是否有隱含的集合?
- 6. 什麼是自動實現的屬性
- 7. 用於自動實現的屬性
- 8. C#中自動實現的屬性
- 9. 自動實現的屬性錯誤
- 10. 可以自動實現的屬性是否有私有集合?
- 11. 自動屬性的ReSharper代碼片段
- 12. 自動實現的屬性是否支持屬性?
- 13. 將常規屬性轉換爲自動實現的屬性
- 14. NpgsqlException上的代碼屬性
- 15. 使用自動實現的屬性超過手動實現的屬性的任何原因?
- 16. 正確實施一次性模式 - 自動實現屬性
- 17. 如何找出屬性是否是反射的自動實現的屬性?
- 18. 從同一個類的實例自動更新現有的類屬性
- 19. 編碼模板 - 代碼文件頂部的自動屬性
- 20. 通過T4代碼生成實現自動INotifyPropertyChanged實現?
- 21. 接口上的自定義屬性或實現它們的類?
- 22. 如何訪問自動實現的屬性的支持變量?
- 23. 自動實現的屬性類的C#泛型
- 24. 服務合同上的PrincipalPermission屬性
- 25. 如何異常實例獲取代碼來實現合同
- 26. 來自代碼背後的Gridview屬性
- 27. 實現不同的代碼在HTML
- 28. 實體框架,代碼第一次3類相同的屬性
- 29. 如何在C#中實現自動實現的屬性來設置值
- 30. 自動實現的屬性必須同時定義get和set訪問器
您是否嘗試過使用類invarients爲了這個目的?我懷疑這會起作用,除非在從自動支持設置器返回時不檢查不變量。 (我還沒有運行帶代碼合同的VS版本,所以我不能自己測試這個,我不知道我是否會用靜態檢查器來獲得一個版本.-() – 2011-04-02 23:11:05
我不是很完美確定是否在項目的發佈版本中檢查不變式,因爲對於這種配置,我已經打開了「僅公共場景合同」選項,我只想在公共方法中處理Contract.Requires。如果我錯了,我會很高興 – wh1t3cat1k 2011-04-03 09:44:01
但是我擔心我是對的:「...您可以添加不變的方法來強制執行數據完整性(第2.3節)...這些檢查 在您的運行時測試版本中實施「 – wh1t3cat1k 2011-04-03 09:48:02