仓酷云

标题: ASP.NET编程:[你必需晓得的.NET]第九回:咀嚼范例――值范例与援用范例(中)-划定规矩无边仓酷云 ... [打印本页]

作者: 精灵巫婆    时间: 2015-1-18 11:25
标题: ASP.NET编程:[你必需晓得的.NET]第九回:咀嚼范例――值范例与援用范例(中)-划定规矩无边仓酷云 ...
对于new隐藏成员的作用,往往是出于使用了一个第三方类库,而你又无法获得这个类库的源代码,当你继承这个类库的某个类时,你需要重新实现其中的一个方法,而又需要与父类中的函数使用同样的函数,这是就需要在自定义的子类中把那个同名函数(或成员)加上new标记,从而隐藏父类中同名的成员。系列文章目次索引:《你必需晓得的.NET
接上回[第八回:咀嚼范例---值范例与援用范例(上)-内存有理]的切磋,持续我们存眷值范例和援用范例的话题。
本文将先容以下内容:

1.弁言
上回[第八回:咀嚼范例---值范例与援用范例(上)-内存有理]的公布,遭到人人的很多存眷,我们从内存的角度懂得了值范例和援用范例的以是然,留下的义务固然是怎样使用范例的分歧特性在体系计划、功能优化等方面发扬其感化。因而,本回是对上回无力的增补,同时应伴侣的但愿,我们全力从内存调试的角度来着眼一些计划的剖析,如许就有助于对这一主题举行透辟和周全的了解,固然这也是下一回的重点。
从内存角度来会商值范例和援用范例是有理有据的,而从划定规矩的角度来懂得值范例和援用范例是一望无际的。本文旨在从上文照应的角度,来把这个主题完全的举一反三,无边无迹的使用,仍是来自反复不定的理论,因而对使用我只能说以一个角度来阐释概念,可是一定不成才能责备局。因而,我们从以下几个角度来完成对值范例与援用范例使用范畴的会商。
2.通用划定规矩与对照
通用有划定规矩:


ASP.NET编程:[你必需晓得的.NET]第九回:咀嚼范例――值范例与援用范例(中)-划定规矩无边仓酷云 ...
登录/注册后可看大图

<br>
复杂的说是因为string的immutable特征,因而每次对string的改动城市在托管堆中发生一个新的string变量,上述string作为参数传送时,实践上实行了s=s操纵,在托管堆中会发生一个新的空间,并实行数据拷贝,以是才有了相似于按值传送的了局。可是依据我们的内存剖析可知,string在实质上仍是一个援用范例,在参数传送时产生的仍是按址传送,不外因为其特别的恒定特征,在函数外部新建了一个string对象并完成初始化,可是函数内部取不到这个变更的了局,因而对表面现的特征就相似于按值传送。至于string范例的特别性注释,我保举Artech的高文《深切了解string和怎样高效地利用string》。
别的,string范例重载了==操纵符,在范例对照是对照的是实践的字符串,而不是援用地点,因而有以下的实行了局:

stringaString="123";
stringbString="123";
Console.WriteLine((aString==bString));//显现为true,等价于aString.Equals(bString);
stringcString=bString;
cString="456";
Console.WriteLine((bString==cString));//显现为false,等价于bString.Equals(cString);

publicstructMyStructTester
{}

publicclassisValueType_Test
{
publicstaticvoidMain()
{
MyStructTesteraStruct=newMyStructTester();
Typetype=aStruct.GetType();
if(type.IsValueType)
{
Console.WriteLine("{0}belongstovaluetype.",aStruct.ToString());
}

}
}
MyStructaTest;
Console.WriteLine(aTest.X);
chara="c";
charb="c";
Console.WriteLine((a.Equals(b)));//会前往true;
对照出真知:

3.有的放矢-使用场所与注重事项
如今,在内存机制懂得和通用划定规矩熟习的基本上,我们就能够很好的总结出值范例和援用范例在体系计划时,怎样作出选择?固然我们的重点是告知你,怎样往选择利用值范例,由于援用范例才是.NET的主体,不用花太多的照顾就能够博得市场。
3.1值范例的使用场所

3.2援用范例的使用场所

4.再论范例判等
范例的对照一般有Equals()、ReferenceEquals()和==/!=三种罕见的办法,个中中心的办法是Equals。我们晓得Equals是System.Object供应的虚办法,用于对照两个对象是不是指向不异的援用地点,.NETFramework的良多范例都完成了对Equals办法的重写,比方值范例的“鼻祖”System.ValueType就重载了Equal办法,以完成对实例数据的判等。因而,范例的判等也要从重写大概重载Equals等分歧的情形详细剖析,对值范例和援用范例判等,这三个办法各有区分,应多加注重。
4.1值范例判等

4.2援用范例判等

publicvirtualboolEquals(objectobj);
publicstaticboolEquals(objectobjA,objectobjB);
一种是虚办法,默许为援用地点对照;而静态办法,假如objA是与objB不异的实例,大概假如二者均为空援用,大概假如objA.Equals(objB)前往true,则为true;不然为false。.NET的年夜部分类都重写了Equals办法,因而判等的前往值要依据详细的重写情形决意。

有需要在自界说的范例中,完成对Equals和==的重写大概重载,以进步功能和针对性剖析。
5.再论范例转换
范例转换是引发体系非常一个主要的要素之一,因而在有需要在这个主题里做以复杂的总结,我们不力图照应周全,可是追往模棱两可。罕见的范例转换包含:

(type)(变量、表达式)
static会见润色操纵符转换润色操纵符operator范例(参数列表);publicStudent
{
//
ASP.NET编程:[你必需晓得的.NET]第九回:咀嚼范例――值范例与援用范例(中)-划定规矩无边仓酷云 ...
登录/注册后可看大图

<br>

staticpublicexpliciteopertatorStudent(stringname,intage)
{
returnnewStudent(name,age);
}

//

<br>
}个中,一切的转换都必需是static的。
6.结论
如今,我们从几个角度延长了上回对值范例和援用范例的剖析,正如本文开首所言,对范例的掌控另有良多能够发掘的要点,可是以偏责备的举措我以为仍是可取的,特别是在手艺寻找的过程当中,力图八面玲珑的做法并非功德。以上的几个角度,我以为是对值范例和援用范例掌控的必经之路,不然在实践的体系开辟中经常会在微小的中央栽跟头,摸不着思想。
咀嚼范例,我们以使用为要点撬开值范例和援用范例的礼貌与周遭。
咀嚼范例,我们将以示例为导航,开动一个层面的深切剖析,下回《第十回:咀嚼范例---值范例与援用范例(下)-使用征途》我们再会。
参考文献
(USA)JeffreyRichter,AppliedMicrosoft.NETFrameworkProgramming
(USA)DavidChappell,Understanding.NET

作者: 因胸联盟    时间: 2015-1-21 05:38
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
作者: 若相依    时间: 2015-1-25 20:23
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
作者: 不帅    时间: 2015-2-3 20:08
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
作者: 愤怒的大鸟    时间: 2015-2-5 15:23
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
作者: 谁可相欹    时间: 2015-2-6 00:33
那么,ASP.Net有哪些改进呢?
作者: 再现理想    时间: 2015-2-13 09:49
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
作者: 乐观    时间: 2015-2-28 22:40
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
作者: 仓酷云    时间: 2015-3-7 01:16
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
作者: 冷月葬花魂    时间: 2015-3-14 00:00
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
作者: 蒙在股里    时间: 2015-3-20 22:19
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2