2011-07-16 73 views
0

我有很多不同的結構像下面(顯然有點更復雜和複雜),我想從ABC內的方法中訪問私有變量和方法,同時使這些相同的變量和方法在類MyMainClass之外不可見;我知道我可以用Reflection來解決這個問題,但我寧願不沿着這條路線走。我確信這裏有人遇到過類似的問題 - 你是如何解決這個問題的?如何組織這些結構?

public class MyMainClass { 

    public struct SStruct { 
     private ulong myInternalVar; 
     public ulong InternalVar{ get{ return myInternalVar; } } 
    } 

    public void ABC() { 
     SStruct val1=new SStruct(); 
     val1.gElementID=101; 
    } 

} 
+0

謝謝大家的意見。 :) – R4D4

回答

3

由於SStruct被聲明嵌套MyMainClass,寓意(至少每當看到類似的東西)是SStruct旨在支持MyMainClass,而不是由外部類使用。如果是這樣,最容易解決您的問題是宣佈structprivate,然後使private成員publicinternal。現在,其他類無法訪問成員(因爲它們根本無法訪問該結構),而MyMainClass可以。

如果你實際使用SStruct其他地方,我會推薦它聲明任何其他類之外,所以它很清楚它的意思是使用這種方式。

最後,你應該避免一般的可變值類型。創建設置你想要的狀態的構造函數,然後讓struct這樣生活。如果你需要「改變」它,那麼這樣做的方法應該返回一個具有所需狀態的新創建的實例。

1

您可以將私有字段標記爲內部字段,以便字段在它們所在的程序集外部不可見。

0

如果嵌套類型需要爲public,則無法實現所需。對你所假裝的最接近的解決方案是創建一個internal setter,這樣它就不會在組件外部可用。無論如何,我不確定你想要達到什麼目的,爲什麼。

我的建議,與小信息availabe,將考慮實現你的結構不可變的類型(可變結構是邪惡的),然後重載構造函數設置內部狀態。這不會解決您所面臨的問題,它只是您的一般設計的一條建議。