新手C#属性set,get的学习(部分转)2018.08.04

    public class person
    {
        public string name;
    }

    public class person
    {
        public string Name { set; get; }
    }

  上面的两个类,第一个person存储的是name属性,由于是public属性,可以由其他类访问,第二个person的name属性通过了set、get进行了封装,get、set分别是可读可写。等价于如下代码

    public class person
    {
        private string name;

        public string Name
        {

            get { return name; }

            set { name = value; }

        }
    }

  上面的代码中name的修饰符是private,Name是public,即在外部调用person时,并不知道你内部装的具体是个什么东西,他只能调用Name,对get、set进行读和写操作,name值并不能在其他类中进行操作。相当于是封装了一个类,内部的东西看不见,你只有get、set两个接口来操作这个类。

  在网上看到了一个很形象的比喻,person 就像银行里的自动取款机,你看不见里面的钱(name),但你能用set(存钱),用get(取钱)。name是一个私有字段,是封装在类中的,类以外的程序不能直接访问的。C#中get、set用法中,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿钱,而是银行营业人员把钱取出来给你的。

  除了读和写的作用之外,还可以用来判定非法字符

    class Person//声明一个Person类
    {
        private string job;//声明为private即在其他类中不可调用job
        public string Apjob
        {
            get
            {
                return this.job;//当读取job值时执行的代码
            }
            set//当设置Apjob属性的使用执行的代码
            {
                if(value=="teacher")//可以用于判定非法字符
                {
                    this.job = "doctor";
                    return;//用于跳出set而不执行下面的语句
                }
                this.job = value;//value是用户设置的值,固定使用
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Person p1=new Person();
            p1.Apjob = "teacher";//执行set段
            Console.WriteLine(p1.Apjob);//执行get段
            Console.ReadKey();
        }
    }

  可看出,get、set用法中

  一是隐藏组件或类内部的真实成员;

  二是用来建立约束的,比如,实现“有你不行”这种约束;

  三是用来响应属性变化事件,当属性变化的时候做某事,只要写在set方法里就行。

  当你想读出或写入属性的值时,存取标志限定了被实现的语句。用于读出属性的值的存取标志记为关键字get,而要修改属性的值的读写符标志记为set。

2018.08.06

猜你喜欢

转载自www.cnblogs.com/do-hardworking/p/9430345.html