志在指尖
用双手敲打未来

结构readonly成员

结构struct成员支撑readonly,用来约束被其润饰的成员不会改动结构的内部状况。加上7.2版别添加的readonlystruct和refreadonly办法回来以及之前的字段声明润饰作用,现在readonly一共有四种润饰作用。下面两段代码以及注释进行了说明。
//(v8.0)readonly成员://1.只对struct成员有用,指示该成员不会修正结构的内部状况。如果该成员直接修正状况或许拜访未使用readonly润饰的成员,则结果会报错。//2.不能用于静态成员和结构函数。publicstructMutablePerson
{privatestaticreadonlyMutablePerson_origin=newMutablePerson();//结构中静态字段即可声明也可初始化//———startrefreadonly—————publicstaticrefreadonlyMutablePersonOrigin=>ref_origin;//由refreadonly回来的引证,调用方无法修正来历。留意此是个特点//publicstaticrefreadonlyMutablePersonNewOne;//refreadonly只能用于办法或许特点,不能用于字段。//———endrefreadonly—————publicstaticintPopulation=100;privatefloat_maxAge;publicstringName;//结构中字段只能在此声明,不能初始化publicintAge{get;set;}//结构中主动特点只能在此声明,不能初始化。//publicintAge{readonlyget;set;}publicfloatHeight{readonlyget;//readonly可以添加到特点或许索引的单个get或许set拜访器中。但一起不能再给特点上有readonly润饰符set;}readonlypublicstringNationality{get;}//readonly润饰的主动特点不能有set拜访器。与下面注释的代码等效//publicstringNationality{readonlyget;}//publicstringNationality{readonlyget{return_nationality;}set{}}string_nationality;readonlypublicfloatMaxAge{get{return_maxAge;}set{}//没有用,但是合法}////结构中不能包括显式的无参结构函数,编译器会主动创立//publicPoint()//{//Name=null;//Age=0;//Height=0;//}publicMutablePerson(stringname):this(name,0)
{////每个结构函数中有必要对一切未初始化的字段和主动特点进行初始化Height=0.5f;
Nationality=”CHINA”;
_maxAge=100;
}publicMutablePerson(stringname,intage):this(name,age,0.5f)=>(Nationality,_maxAge)=(“CHINA”,100);//每个结构函数中有必要对一切未初始化的字段和主动特点进行初始化publicMutablePerson(stringname,intage,floatheight)=>(Name,Age,Height,Nationality,_maxAge)=(name,age,height,”CHINA”,100);//每个结构函数中有必要对一切未初始化的字段和主动特点进行初始化publicMutablePerson(MutablePersonother)
{this=other;
}publicMutablePersonReplace(MutablePersonother)
{this=other;returnother;
}publicvoidIncrease(intageOffset,floatheightOffset)//此成员不能用readonly润饰,因为里边代码会改动成员状况。{
Age+=ageOffset;
Height+=heightOffset;
}//readonly成员中没有对状况字段和特点的任何修正publicreadonlystringSayHello=>$”Hello,mynameis{Name},Iam{Age}andmyheightis{Height}”;//readonly函数拜访未标记为readonly的SayHello办法时,会宣布创立防御性副本的警告。publicreadonlyoverridestringToString()=>$”(Name:{Name},Age:{Age},Height:{Height}),{SayHello}”;
}
//(v7.2)readonlystruct指示Point是不可变的。有如下约束://1.该结构中每个字段和特点都是readonly//2.需要公共结构函数初始化成员//3.this也是readonly,只能再结构函数中进行初始化赋值//4.不能界说像字段样子的事情publicreadonlystructReadonlyPerson
{privatestaticreadonlyReadonlyPerson_origin=newReadonlyPerson();//结构中静态字段即可声明也可初始化publicstaticrefreadonlyReadonlyPersonOrigin=>ref_origin;//由refreadonly回来的引证,调用方无法修正来历。留意此是个特点publicstaticintPopulation=100;//readonlystruct对静态字段没有用用,不用指定readonlypublicreadonlystringName;//有必要给readonlystruct中的字段指定readonly。结构中字段只能在此声明,不能初始化publicintAge{get;}//不能有set拜访器,且只读主动特点指示编译器为这些特点创立readonly的支撑字段。结构中主动特点只能在此声明,不能初始化publicfloatHeight{get;}//不能有set拜访器,且只读主动特点指示编译器为这些特点创立readonly的支撑字段。结构中主动特点只能在此声明,不能初始化////结构中不能包括显式的无参结构函数,编译器会主动创立//publicReadonlyPerson()//{//Name=null;//Age=0;//Height=0;//}publicReadonlyPerson(stringname):this(name,0)c#
{
Height=0.5f;//有必要在此初始化,没有参数有必要初始化为默认值,不能在结构声明中初始化}publicReadonlyPerson(stringname,intage):this(name,age,0.5f){}//每个结构函数中有必要对一切未初始化的字段和主动特点进行初始化publicReadonlyPerson(stringname,intage,floatheight)=>(Name,Age,Height)=(name,age,height);//每个结构函数中有必要对一切未初始化的字段和主动特点进行初始化publicReadonlyPerson(ReadonlyPersonother)
{this=other;//可以用另一个对象来初始化。}publicMutablePersonReplace(MutablePersonother)
{//this=other;//this是readonly,不能被修正。//this.Age=other.Age;//this是readonly,他的成员也是不能被修正。returnother;
}publicvoidIncrease(intageOffset,floatheightOffset)
{//Age+=ageOffset;//Age在readonlystruct中是只读的,因而在这里不能被赋值。//Height+=heightOffset;//Height在readonlystruct中是只读的,因而在这里不能被赋值。}//该成员中没有对状况字段和特点的任何修正publicstringSayHello=>$”Hello,mynameis{Name},Iam{Age}andmyheightis{Height}”;//该函数不能给本结构中的任何字段和特点做出修正publicoverridestringToString()=>$”(Name:{Name},Age:{Age},Height:{Height}),{SayHello}”;
}

未经允许不得转载:IT技术网站 » 结构readonly成员
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

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