WEB开发网
开发学院软件开发C语言 创建常量、原子性的值类型 阅读

创建常量、原子性的值类型

 2009-03-26 08:22:16 来源:WEB开发网   
核心提示: 这样,我们对Address对象的创建,创建常量、原子性的值类型(4),将所有字段的赋值都在构造函数中作为一个整体来进行;而当我们需要改变单个字段的值时,也需要重新创建对象再赋值,请参考 C#类型基础),现在我们修改Address 类,我们看下下面的测试:Address a = new Ad

这样,我们对Address对象的创建,将所有字段的赋值都在构造函数中作为一个整体来进行;而当我们需要改变单个字段的值时,也需要重新创建对象再赋值。我们看下下面的测试:

Address a = new Address("陕西", "西安", "710068");

try {
    a = new Address("青岛", "山东", "22233");// 发生异常,对a重新赋值失败,但状态保持一致
} catch {
}

Console.WriteLine(a.ToString()); // 输出:Province: 陕西, City: 西安, Zip: 710068

避免外部类型对类型内部的访问

上面的方法解决了数据不一致的问题,但是还漏掉了一点:当类型内部维护着一个引用类型字段,比如说数组。尽管我们将它声明为了readonly,类型外部还是可以对它进行访问(如果你不清楚值类型和引用类型的区别,请参考 C#类型基础)。现在我们修改Address 类,添加一个数组phones,存储电话号码:

private readonly string[] phones;

public Address(string province, string city, string zip, string[] phones) {  
    // 略...
    this.phones = phones;
}

public string[] Phones {
    get { return phones; }
}

我们接下来做个测试:

string[] phones = { "029-88401100", "029-88500321" };
Address a = new Address("陕西", "西安", "710068", phones);

Console.WriteLine(a.Phones[0]);     // 输出: 029-88401100

string[] b = a.Phones;
b[0] = "029-XXXXXXXX";       // 通过b修改了 Address的内容

Console.WriteLine(a.Phones[0]); // 输出: 029-XXXXXXXX

上一页  1 2 3 4 5  下一页

Tags:创建 常量 原子

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接