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