区分C#的字段和属性

public class TestClass
{
    private string _AA;

    public string BB
    {
        get { }
        set { }
    }
}

在上边例子中我们都知道_AA是字段,BB是属性,再看下边的例子:

public class TestClass
{
    public string _AA;

    private string BB
    {
        get { }
        set { }
    }
}

_AA是字段还是属性?BB是字段还是属性?突然发现长久以来潜意识的竟用private和public来区分字段还是属性了,潜意识认为private的是字段,public的是属性!实际上,字段还是属性的区别应是看有无访问器,无访问器的为字段,有访问器的则为属性,所以,第二个例子中_AA仍是字段,BB仍是属性。我们再来看一个例子:

public class TestClass
{
    public string AA;

    public string BB
    {
        get { }
        set { }
    }
}

对外界而言,访问上边字段和属性其实中一样的,那字段和属性有什么区别呢?个人认为主要区别有以下几点:

·可在get和set块对属性的取值范围等做限制,而字段的范围只取决于其类型,无法精确控制;
·可通过设置get和set块的有无,设置属性的读写权限;

正因为上边几点,所以我们常常在声明一个public属性的同时声明一个private字段,在字段中保存属性的值以便在读取属性值时使用:

public class TestClass
{
    public string _AA;

    public string BB
    {
        get
        {
            if (_AA.Substring(0, 1) == "@")
            {
                return _AA;
            }
            else
            {
                return string.Empty;
            }
        }
        set { _AA = value; }
    }
}

注:在类内部使用字段和属性没有一点区别,不受访问权限的限制!

评论: 0 | 引用: 0 | 查看次数: 3759
发表评论
登录后再发表评论!