2012-05-26 129 views
1

嗨下面的代碼的意圖是返回一個靜態類,其中包含一組相關的數據。你能推薦我怎樣才能做得更好?c#靜態類聲明

public class People 
{ 
    //want info to be setup in this class, so it can be accessed elsewhere 
    public static readonly string[] ab = { "ALBERT", "EINSTEIN"};  
    public static readonly string[] dk = { "DONALD", "KNUTH" }; 

    //is this efficient or instantiated once per access? IF SO HOW CAN I DO THIS BETTER? 
    public static readonly Info AB = new Info(ab, 100); 
    public static readonly Info DK = new Info(dk, 80); 

} 

public class Info 
{ 
    private string[] _name; 
    private int _age; 

    public string[] Name { get{ return _name}; } 
    public int Age { get { return _age; } } 

    public Info(string[] n, int a) 
    { 
     _name = n; 
     _age = a; 
    } 
} 
+1

fyi,值'Name'是可變的。 –

回答

3

是這種高效或實例化每一次訪問?

如果您指的是構建Info實例的時刻,它們是在第一次訪問成員之前構建的。所以不管你撥打People.AB多少次,對象都是一樣的。

從MSDN約Static Classes and Static Class Members:靜態成員首次訪問和靜態構造函數之前,如果存在的話,被稱爲前

靜態成員初始化。

如果你想使你的情況Info完全不變(如丹尼爾說的_name值可一旦你對數組的引用改變),你可以改變的_name類型及其財產accesor到:

private List<string> _name; 

public IList<string> Name { get { return _name.AsReadOnly(); } } 

希望我瞭解您的需求!

+0

你爲什麼選擇在你的吸氣劑中使用IList ?因爲私有變量_name已經在使用具體的列表類型? – River

+0

這是因爲'AsReadOnly()'方法返回一個'ReadOnlyCollection '實例,它實現了'IList ''接口,但沒有擴展'List '類,所以它不能被轉換。 – Chopin