set,get方法(属性,索引器)

很多时候我们不可以把一些字段暴露出来允许别人调用和修改,为了隐藏这些字段又便于加限制的使用,在面向对象编程中一般采用写get set函数的办法,比如:

        //字段_age, "_"表示private
        private int _age;

        //获取字段值的方法,需要返回这个int类型字段
        public int GetAge()
        {
            return this._age;
        }

        //设置字段值的方法,不需要返回值,定义一个int类型的value
        public void SetAge(int value)
        {
            if (value >= 0 && value <= 120)//可以加条件来限制字段的范围
            {
                this._age = value;
            }
            else
            {
                throw new Exception ("Age value has error.");
            }
        }

学生的年龄限制在0-120,则可以避免20岁输入成200岁这种错误。

C#语言单独引入了属性这种概念,用来对字段加以限制,属性是一种语法糖。

        //字段_age, "_"表示private
        private int _age;

        public int Age
        {
            //获取字段值的方法
            get
            {
                return this._age;
            }

            //设置字段值的方法,不需要返回值
            set
            {
                if (value >= 0 && value <= 120)//规定好value是上下文关键字(蓝色)
                {
                    this._age = value;
                }
                else
                {
                    throw new Exception("Age value has error.");
                }
            }
        }

只读方法:(不允许往里写,只允许读取的方法。另外只写方法是没有意义的,因此不举例只写方法)

        //字段_age, "_"表示private
        private int _age;

        public int Age
        {
            //获取字段值的方法
            get
            {
                return this._age;
            }
        }

属性快捷键
propfull 然后按两下tab会出现

        private int myVar;

        public int MyProperty
        {
            get { return myVar; }
            set { myVar = value; }
        }

最简单:(这种属性没有任何保护,与一个公有的字段完全一样,很容易被改变值,带有这种属性的类一般是传输数据用的)

        public int Age{get;set;}

索引器:Indexer
基本语法:

修饰符 类型名 this [参数列表] //this表示他是个索引器
{
    get{
    }
    set{
    }
}

举个例子:

public string s;
//可容纳100个整数的整数集  
private string[] arr = new string[10];
//声明索引器  
public string this[int index]//这里定义一个index
{
    get
    { //检查索引范围  
        if (index < 0 || index >= 10)
        {
            return null;
        }
        else
        {
            return arr[index];
        }
    }
    set
    {
        if (!(index < 0 || index >= 100))
        {
            arr[index] = value;
        }
    }
}

posted @ 2019-08-22 14:40  卯毛  阅读(1225)  评论(0编辑  收藏  举报