.NET 指南:字段的设计

字段用来保持与对象相关联的数据。在大多数情节下,库中的任何非静态字段都应该是对于开发者不可见的。下列指导方针有助于你在库设计中正确地使用字段。

不要提供公共的或被保护的实例字段。

公共的字段和被保护的字段不是版本良好的并且不会通过代码访问的安全需要而被保护。而是可以用公共的可见字段来作为替代,并使用私有的字段并通过属性来暴露它们。

为始终没有变化的常量而使用常量字段。

例如,Math 类就把 E 和 PI 定义成了静态常量。

编译器会把常量字段的值直接插入到代码调用中,这就表示常量的值始终不会被改变,并且也不会引入兼容性问题的风险。

为预定义的对象实例而使用公共的静态只读字段。

例如,DateTime 类提供了能够用来获得 DateTime 对象并设置最大或最小时间值的静态只读字段。请参考:[MaxValue 属性]和[MinValue 属性]。

不要把易变的类型实例指派给只读字段。

使用可变的类型而被创建的对象能够在它们被创建之后被更改。例如,数组和大部分集合就是可变的类型,而 Int32、Uri,以及 String 就是不可变的类型。关于保持了一个可变的引用类型的字段,只读的修改器能够防止字段值被重写,但是不能保护可变的类型被更改。

下列代码范例示范了使用只读字段时的问题。BadDesign 类创建了一个只读的字段并使用一个只读的属性来暴露它。但是这仍然无法防止 ShowBadDesign 类对于只读字段所作的更改。

using System;

namespace Examples.DesignGuidelines.Fields
{
    public class BadDesign
    {
        public readonly int[] data = {1,2,3};

        public int [] Data
        {
            get {return data;}
        }
        public void WriteData()
        {
            foreach (int i in data)
            {
                Console.Write ("{0} ", i);
            }
            Console.WriteLine();
        }
    }
    public class ShowBadeDesign
    {
        public static void Main()
        {
            BadDesign bad = new BadDesign();
            // 下列语句行将写入:1 2 3
            bad.WriteData();

            int[] badData = bad.Data;
            for (int i = 0; i< badData.Length; i++)
            {
                badData[i] = 0;
            }
            // 下列语句行将写入:0 0 0
            // 因为坏数据已经被更改。
            bad.WriteData();
        }
    }
}

转载于:https://www.cnblogs.com/Laeb/archive/2007/02/01/637387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值