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


        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//属性后面不加()加了()就成了方法 例如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

  • 相关阅读:
    gitlab+jenkens+maven私服
    记录一次gitlab+jenkins入坑到排坑的过程
    python进阶之路一,变量、运算符、判断、while循环
    cat EOF追加与覆盖
    tcpdump使用
    iptables学习
    Java生产消费模型—ArrayBlockingQueue详解
    Java泛型详解(透彻)
    Java源码初探_logging日志模块实现
    Java设计模式学习总结
  • 原文地址:https://www.cnblogs.com/do-hardworking/p/9430345.html
Copyright © 2020-2023  润新知