我試圖強制使用我的類的代碼始終直接獲取它的某個屬性 - 從不保存並單獨使用它。例如,我希望以下內容不可編譯。CLI/C#中屬性的特殊訪問控制類
int x = myObj->prop1;
int y = x + 1;
我想強迫他們得到這樣的價值:
int y = myObj->prop1 + 1;
我猜這是不可能的,但我想如果它是那麼這裏有人會知道。
如果你想知道爲什麼,這是複雜的,但與強制代碼中使用我的類的方式,是與類的將來重複向前兼容的事情。
我試圖強制使用我的類的代碼始終直接獲取它的某個屬性 - 從不保存並單獨使用它。例如,我希望以下內容不可編譯。CLI/C#中屬性的特殊訪問控制類
int x = myObj->prop1;
int y = x + 1;
我想強迫他們得到這樣的價值:
int y = myObj->prop1 + 1;
我猜這是不可能的,但我想如果它是那麼這裏有人會知道。
如果你想知道爲什麼,這是複雜的,但與強制代碼中使用我的類的方式,是與類的將來重複向前兼容的事情。
您可以返回某種不可複製的代理而不是存儲變量的實例。但請考慮對於值類型,返回的實例是您的屬性的支持字段的完全獨立副本,因此您的圖書館的客戶端不可能「做任何傷害」......嗯,也許你應該解釋你的意圖詳細...
發佈我自己的答案後,我意識到這幾乎是你在這裏說的,所以你會得到凹凸。我會留下我的回答,以防萬一有人需要它更多barney風格。 – Jin
我試圖引用返回一個對象,但不允許用戶存儲參考 - 「INT」的例子是一個糟糕的一個來說明這個(對不起)。當您返回參考資料時,所有投注都將關閉,所以我試圖做的事情不具體。
不過,我現在如果你想做到這一點,你需要你的財產不被一個參考實現。只要您可以用非託管對象來表示您的財產,這是可能的。
例如,我的「富」類有有X和Y值的「點」的參考。
我可以添加一個屬性來富返回與所述X和Y值,而不是參考對象本身的結構體。
然後,外部對象可以看到Point對象的值,但不會混淆對象本身。
另一種方法是使「點」的成員/方法大多是內部的,所以當富返回它作爲一個屬性,外部組件可沒有真正做很多,但閱讀X Y值。
感謝大家的關注!
C#或C++的契約? – onemach
@onemach C#沒有' - >'對象,所以它不能是C# –
你可能有數據返回爲const嗎?然後,您可以通過聲明特定成員的函數\重載是否爲常量來限制哪些例程和/或操作符可以應用於該對象 - 儘管如此,這是相當混亂的,但我必須承認。我知道你可以在C++中做到這一點,我不確定你在使用什麼語言。 – Jeremy