2015-03-31 75 views
0

我現在有一個類實例化另一個類,像這樣實例化對象並保護其屬性外

public abstract class ResponseAdapter 
{ 
    PingResult result = new PingResult(); 

    public PingResult Result 
    { 
     get { return result; } 
    } 
} 

雖然我想結果是公開的,我不希望被保護的內容外多變環境。

我知道我可以爲Result創建一個構造函數,並使事情只讀,但實例化PingResult的類會單獨設置其屬性。是否有任何關鍵字或技術可以讓我在當前課程外只讀維護PingResult的屬性?

回答

0

在C#中沒有任何東西給出了你所問的功能。

有兩種選擇可以考慮。

  1. 使PingResult不可變並將其公開。缺點是沒有人可以修改它。
  2. 用一些不可變的抽象來揭示PingResult。 I.e IPingResult接口不提供成員來改變狀態。你仍然可以保持PingResult可變,它可以用來修改它在當前類中的問題。

有了你可以選擇以紀念PingResult類私有,這使得它不可訪問外部類和揭露實例作爲IPingResult秒方法。這樣,您可以確定只有ResponseAdapter可以修改PingResult,因爲其他類甚至不會看到setter;他們只能看到只讀界面。

+0

這就是我要找的 - 感謝。 – dotnetnoob 2015-03-31 12:07:13

2

也許爲PingResult(例如PingResultWrapper)創建一個包裝器/代理類,其中ResponseAdapter以其屬性公開。對PingResultWrapper所做的任何編輯都將通過該編輯進行調整,因此您可以完全控制可以對包裝的對象進行哪些更改。此外,最好有PingResultWrappedPingResult實現相同的接口,以便調用者可以更抽象地對待它(即不需要知道實現細節)。

0

添加一個僅包含獲取者的接口(IPingResult)並從中繼承PingResult。

public PingResult Result 
    { 
     get { return result; } 
    } 

將改爲返回接口,而不是類:

public IPingResult Result 
     { 
      get { return result; } 
     }