志在指尖
用双手敲打未来

C#面向对象–特点

一、特点(Property)作为类和结构的成员,是对字段的一种封装办法,实际上是一种特殊的办法,被称为拜访器(Accessor),从而躲藏完成和验证代码,有助于进步字段读取和赋值的安全性和灵活性;
1.特点拜访器包括两品种型:用于读取并返回值的get拜访器,用于赋值新值的set特点拜访器;通常将字段声明为私有字段,然后经过特点来对其进行拜访:
privateintmyNum=10;//特点要读取和赋值的字段,也被称为后备字段(BackingField)publicintMyNum
{get//get拜访器,有必要返回特点声明类型的返回值{returnmyNum;
}set//set拜访器{//do…赋值之前通常加入一些数据验证逻辑myNum=value;//运用关键字value表明运用set拜访器赋值的新值,其类型为特点声明类型}
}//运用时,像字段一样进行拜访:intnum=MyNum+10;//读取特点时,调用MyNum的get拜访器读取myNum的值MyNum=30;//给特点赋值时,调用MyNum的set拜访器给myNum赋值
※在开启优化代码选项时,对get拜访器的调用将由JIT编译器进行办法内联优化,不存在办法调用开销,但无法内联虚特点的get拜访器;
2.特点根据其声明的拜访器品种分为三种:读写特点(一起声明get拜访器和set拜访器)、只读特点(只声明get拜访器)和只写拜访器(只声明set拜访器);
※只写特点很少呈现,常用于约束对敏感数据的拜访;
3.拜访器的可拜访性默许与特点的可拜访性相同,当特点一起声明晰get拜访器和set拜访器时,能够给其间恣意一个拜访器添加可拜访修饰符来指定其可拜访性,显式声明的可拜访性要比特点自身的可拜访性有更严格的约束;
※通常经过指定公共特点的拜访器可拜访性来保留get拜访器的公共可拜访性,约束set拜访器的可拜访性:
publicintMyNum
{get{returnmyNum;
}privateset//将set拜访器声明为私有的{
myNum=value;
}
}
4.当拜访器中不需求任何额定逻辑时,能够运用主动完成特点(Auto-ImplementedProperty,简称主动特点,AutoProperty)简化特点的声明办法,不再需求独自声明一个字段,将由编译器创立仅能够经过拜访器拜访的专用、匿名字段(无法在客户端代码中直接拜访该字段),声明拜访器时也不需求供给详细完成:
publicintMyProperty{get;set;}
※主动特点的拜访器仍然能够运用拜访修饰符;
※主动特点有必要声明get拜访器,只读的主动特点能够在初始化时和构造函数中赋值;
※在C#6.0以上版本中,能够像字段一样初始化主动特点:
publicintMyProperty{get;set;}=10;
※主动特点是编译器为我们预备的一种语法糖;
5.当特点所封装的类型是一个值类型时,运用get拜访器得到的对象不能直接对其成员进行修改,详见;
二、经过反射能够获取类型中一切的特点信息:
PropertyInfo[]myProperties=typeof(MyClass).GetProperties();for(inti=0;i<myProperties.Length;i++)
{
Console.WriteLine(myProperties[i].Name);//MyNum}
1.在运用反射获取类型的一切办法时,假如类型中包括特点,也会获取特点中的公共拜访器所生成的办法:
typeof(MyClass).GetMethods();//get_MyNumset_MyNumToStringEqualsGetHashCodeGetType
※在运用反射获取类型的一切字段时,假如类型中包括主动特点,会获取到编译器主动声明的私有字段:
typeof(MyClass).GetFields(BindingFlags.NonPublic|BindingFlags.Instance);//k__BackingField
2.检查声明特点的IL代码:
3.检查运用特点读取和赋值的IL代码:
假如您觉得阅读本文对您有协助,请点一下“推荐”按钮,您的认但是我写作的最大动力!

未经允许不得转载:IT技术网站 » C#面向对象–特点
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载