当前位置: 首页 > 编程语言 > C#

访问者的目的是什么?分享

时间:2023-04-11 00:51:13 C#

访客的目的是什么?有人可以帮助我了解获取和设置吗?他们为什么需要它?我可以创建一个公共变量。警告:我假设您已经了解面向对象编程。什么是财产?属性是语言元素,可让您避免重复使用其他语言(如JavagetXYZ())中的getXYZ()访问器和setXYZ()增变器技术。它们为什么存在?他们的目标是解决以下问题:在变异开始时说get和set很烦人和分心。在Java中你经常说:classperson{privateint_age;publicvoidsetAge(intvalue){/*先检查值,然后设置_age*/}publicintgetAge(){returnthis._age;}}并继续说:if(person.getAge()>blah||person.getAge()过了一会儿,get和set变得很烦人。直接访问变量会破坏封装,所以这不是一个选项。它们是如何使用的?它们像变量一样使用。你可以像变量一样读/写它们。它们是如何创建的?它们被创建为方法。你定义一对方法:返回属性的当前值。通常,这无非是以下内容:classPerson{privateint_age;//声明支持字段publicintAge{get{returnthis._age;}set{...}}}设置属性的值:classPerson{publicintAge{get{...}set{if(value其他说明:自动实现的属性C#3.0引入了自动实现的属性:publicintAge{get;set;}这相当于:privateint_age;//名称是自动生成的publicintAge{get{returnthis._age;}set{this._age=value;}}为什么存在?它可以帮助您避免破坏客户端可执行文件的更改。假设您很懒惰,不想键入整个内容,并决定公开公开该变量。然后创建一个读取或写入该字段的可执行文件。然后您更改你的想法并决定你确实需要一个属性,所以你将它更改为A。怎么了?依赖的可执行文件中断,因为代码不再有效。自动实现的属性可以帮助你避免这种情况,而无需在初始代码中添加额外的冗余。indexer扩展属性语法让你索引对象(惊喜!),就像数组一样。对于C++用户:这类似于重载operator[]。示例:privateint[]_elements;publicintthis[intindex]//索引属性{get{returnthis._elements[index];}set{//对索引和值进行任何检查this._elements[index]=value;然后你像obj[5]=10;一样使用它们对象[5]=10;,相当于调用了obj的indexer的set方法。实际上,System.Collections.Generic.List是有索引的:varlist=newList();列表.添加(10);列表[0]=5;//你正在索引列表,就好像它是一个数组一样!这不是很整洁吗??还要别的吗?属性还有许多其他功能,但并非所有功能都在C#中可用:它们称为访问器属性的访问器包含与获取(读取或计算)或设置(写入)属性相关联的可执行语句。访问器声明可以包含get访问器、set访问器或两者。get访问器的主体类似于方法的主体。它必须返回属性类型的值。http://msdn.microsoft.com/en-us/library/w86s7x04.aspx私有字符串m_Name;//name字段publicstringName//Name属性{get{returnm_Name;}}设置访问器类似于return类型为void的方法。它采用一个名为value的隐式参数,其类型是属性的类型。私人名字;publicstringName{get{returnm_Name;}设置{m_Name=值;然后在C#3的化身中,您可以使用自动属性??publicstringName{get;放;}//读写publicstringName{get;}//只读publicstringName{get;私有集;}//readandparentwritehttp://msdn.microsoft.com/en-us/library/bb384054.aspx属性充当对象内部状态的访问者,隐藏该状态的实现。因此,例如,您的类中可能有一个名称属性publicclassExample{privatestringfirstName;publicstringFirstName{get{returnthis.firstName;}}}所以任何使用这个类的人都不需要知道如何存储名字,他们只知道他们可以获得它的字符串表示。通过添加一个集合,您还可以添加一个更改对象内部状态的更改器publicclassExample{privatestringfirstName;publicstringFirstName{get{returnthis.firstName;}set{setthis.firstName=value;}}}你还有名字内部存储的方式(封装)可以隔离,但是用户可以通过传入来改变一个字符串。简单地说,get和set访问器是在属性上调用的函数;也就是说,当您检索一个值或设置它时。它以检索或设置值的方式强制执行特定行为。例如,您可能想要一种获取/设置密码的机制。通常,您只想比较密码的哈希值而不是存储明文的内容,因此您必须使用getter变量来检索存储的哈希值,而setter将获取提供的输入并将其存储为哈希值。这就是我的意思:publicclassUser{//这里的Usery属性,以及...privatestring_password;公共字符串密码{get{return_password;}set{_password=SomeHashingFunction(value);}}}value来自variable赋值中给出的setter提供的变量。例如:someuser.Password="blah";获取和设置用于属性。它们中的每一个都可以是公共的、受保护的或私有的。与访问器和修改器方法类似,它们允许在代码尝试访问/修改属性时进行一些计算。当然,只要你定义了一个get/set,其他的是可选的。没有属性的例子:privateinttest;publicintgetTest(){//一些关于测试的计算,也许吧?返回测试;}privatevoidsetTest(inttest){//一些错误/范围检查,也许?这个。测试=测试;具有属性:privateinttest;publicintTest{get{//一些关于测试的计算,也许吧?返回测试;}privateset{//一些错误/范围检查,也许?测试=值;//value是这里的关键字}}get{}和set{}是提供轻松读写私有字段能力的访问器。使用一个简单的例子:publicclassFoo(){//Fieldprivateint_bar;//属性publicintBar{get{return_bar;}设置{_bar=值;}//value是set访问器的隐式参数。//当你对属性进行赋值时,你//assign的值是"value"中的值}}在这种情况下,Bar是一个公共属性,它有一个getter和一个setter允许访问私有字段_bar否则不会可以在类Foo之外访问。现在在一个有Foo实例的类中,您可以这样做:publicclassIHasAFoo(){privateFoo_myFoo=newFoo();publicvoidSomeMethod(){_myFoo.Bar=42;因此,公共访问器允许您在Foo中设置私有字段的值。希望有帮助!以上就是C#学习教程:访问者的目的是什么?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: