仓酷云
标题:
ASP.NET网页编程之详解C# Object.Equals函数仓酷云
[打印本页]
作者:
柔情似水
时间:
2015-1-18 11:16
标题:
ASP.NET网页编程之详解C# Object.Equals函数仓酷云
我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高net网页编程的运行效率。只是将net网页编程源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。能够说,C#Object.Equals函数完成判等操纵,必要经由三个步骤,第一步是必要依据对象所属范例的==操纵符的实行了局;第二步是辨别是不是为null,也是和第一步一样,必要依据范例的==操纵符的实行了局;最初一步要利用到范例的Equals函数的实行了局。也就是说这个静态函数的前往了局,要取决于前面要提到的两个判等函数。范例是不是供应响应的判等函数,成为这个函数前往了局的主要要素。
那末关于C#Object.Equals函数这个静态办法来讲,虽然说承受参数的范例也属于援用范例,可是分歧于Object.ReferenceEquals函数,关于以下的代码,能得出准确的了局。
intn=10;Debug.WriteLine(string.Format("{0}",Object.Equals(n,n)));Debug.WriteLine(string.Format("{0}",Object.Equals(n,10)));
复制代码
这是由于在此函数中要用到详细范例的两个判等函数,不外就函数自己而言,该做的判别都做了,因而不必要往重载增加庞大的操纵。
为了更好的陈述剩下两个函数,先注释一上等价的意义。关于等价的意义,就是自反、对称和传送。
所谓自反,即a==a;
而对称,是a==b,则b==a;
传送是a==b,b==c,则a==c;
了解等价的意义后,那末在完成范例的判等函数也要满意这个等价划定规矩。
关于能够重载的两个判等函数,起首来先容的是范例的Equals函数,其大抵情势以下:publicoverrideboolEquals(objectright);
那末关于一个范例的Equals要做些甚么操纵呢,一样平常来讲大抵以下:
publicclassKeyData{privateintnData;publicintData{get{returnnData;}set{nData=value;}}publicoverrideboolEquals(objectright){//Checknullif(right==null)returnfalse;//checkreferenceequalityif(object.ReferenceEquals(this,right))returntrue;//checktypeif(this.GetType()!=right.GetType())returnfalse;//converttocurrenttypeKeyDatarightrightASKeyData=rightasKeyData;//checkmembersvaluereturnthis.Data==rightASKeyData.Data;}}
复制代码
如上增添了一个范例反省,即
if(this.GetType()!=right.GetType())这部分,这是因为子类对象能够经由过程as转化成基类对象,从而形成分歧范例对象能够举行判等操纵,违背了等价干系。
除别的关于范例的Equals函数来,实在并没无限制范例非要属于援用范例,关于值范例也是能够重载此函数,可是我其实不保举,次要是Equals函数的参数范例是不成变的,也就是说经由过程此办法,值范例要经由装箱操纵,而这是对照影响效力的。
而关于值范例来讲,我保举利用最初一种判等函数,即重载运算符==函数,其大抵情势以下:
publicstaticbooloperator==(KeyDataleft,KeyDataright);
复制代码
关于一个值范例而言,其的大抵情势应当以下:
publicstructKeyData{privateintnData;publicintData{get{returnnData;}set{nData=value;}}publicstaticbooloperator==(KeyDataleft,KeyDataright){returnleft.Data==right.Data;}publicstaticbooloperator!=(KeyDataleft,KeyDataright){returnleft.Data!=right.Data;}}
复制代码
因为==操纵与!=操纵要同步界说,以是在界说==重载函数的时分,也要界说!=重载函数。这也是。Net在判等操纵坚持分歧性。那末关于最初一个判等函数,这类重载运算符的办法其实不合适援用范例。这就是。Net常常征象,往判别两个援用范例,不要用==,而要用某个对象的Equals函数。以是在编写本人范例的时分,要保存这类作风。
听03很多师兄说主讲老师杭城方讲课很差就连旁听也没有去了)
作者:
简单生活
时间:
2015-1-20 19:01
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
作者:
灵魂腐蚀
时间:
2015-1-29 15:06
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
作者:
分手快乐
时间:
2015-2-2 21:32
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者:
深爱那片海
时间:
2015-2-6 15:23
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
作者:
爱飞
时间:
2015-2-10 01:53
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
作者:
因胸联盟
时间:
2015-2-28 13:53
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
作者:
若相依
时间:
2015-3-9 23:28
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
作者:
海妖
时间:
2015-3-10 15:04
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
作者:
admin
时间:
2015-3-11 14:08
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
作者:
乐观
时间:
2015-3-18 17:43
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
作者:
仓酷云
时间:
2015-3-26 06:33
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2