1

嗨,下面代码的目的是返回一个包含相关数据集的静态类。你能推荐我如何做得更好吗?

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;
    }
}
4

1 回答 1

3

这是有效的还是每次访问都实例化一次?

如果您的意思是构建实例的时刻Info,它们是在第一次访问成员之前构建的。所以无论你调用多少次People.AB,对象都是一样的。

从 MSDN 关于静态类和静态类成员

在第一次访问静态成员之前以及在调用静态构造函数(如果有的话)之前初始化静态成员。

如果你想让你的实例Info完全不可变(正如丹尼尔所说,_name一旦你获得对数组的引用,值就可以改变),你可以将类型_name及其属性访问器更改为:

private List<string> _name;

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

希望我已经了解您的需求!

于 2012-05-26T00:32:54.757 回答