仓酷云

标题: ASP.NET编程:[你必需晓得的.NET] 第四回:后发先至:class和struct仓酷云 [打印本页]

作者: 蒙在股里    时间: 2015-1-18 11:25
标题: ASP.NET编程:[你必需晓得的.NET] 第四回:后发先至:class和struct仓酷云
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?系列文章目次索引:《你必需晓得的.NET
本文将先容以下内容:
•面向对象基础观点
•类和布局体简介
•援用范例和值范例区分

1.弁言提起class和struct,我们起首的感到是语法几近不异,报酬却翻天复地。汗青将接力棒由面向历程编程传到面向对象编程,class和struct也背负着各自的运气前行。在我以为,struct好汉迟暮,class世界独行,最实质的区分是class是援用范例,而struct是值范例,它们在内存中的分派情形有所区分。由此发生的一系列差别性,本文将做以周全会商。
2.基础观点
2.1.甚么是class?
class(类)是面向对象编程的基础观点,是一种自界说数据布局范例,一般包括字段、属性、办法、属性、机关函数、索引器、操纵符等。由于是基础的观点,以是不用在此具体形貌,读者能够查询相干观点懂得。我们重点夸大的是.NET中,一切的类都终极承继自System.Object类,因而是一种援用范例,也就是说,new一个类的实例时,对象保留了该实例实践数据的援用地点,而对象的值保留在托管堆(managedheap)中。
2.2.甚么是struct?
struct(布局)是一种值范例,用于将一组相干的信息变量构造为一个单一的变量实体。一切的布局都承继自System.ValueType类,因而是一种值范例,也就是说,struct实例分派在线程的仓库(stack)上,它自己存储了值,而不包括指向该值的指针。以是在利用struct时,我们能够将其看成int、char如许的基础范例类看待。

ASP.NET编程:[你必需晓得的.NET] 第四回:后发先至:class和struct仓酷云
登录/注册后可看大图

<br>3.不异点,分歧点
不异点:语法相似。
分歧点:

我们能够复杂的了解,class是一个能够动的呆板,有举动,有多态,有承继;而struct就是个零件箱,组合了分歧布局的零件。实在,class和struct最实质的区分就在于class是援用范例,内存分派于托管堆;而struct是值范例,内存分派于线程的仓库上。由此差别,招致了上述一切的分歧点,以是只要深入的了解内存分派的相干内容,才干更好的把握。本系列将再今后的内容中,将援用范例和值范例做以深切的对照和切磋,敬请存眷。固然正如本文题目形貌的一样,利用class基础能够替换struct的任何场所,class后发先至。固然在某些方面struct有功能方面的上风,可是在面向对象编程里,基础是class横行的世界。
那末,有人难免会提出,既然class几近能够完整替换struct来完成一切的功效,那末struct另有存在的需要吗?谜底是,最少在以下情形下,鉴于功能上的思索,我们应当思索利用struct来取代class:

一切这些是struct有一席之地的来由,固然大概另有其他的更多说法,只是我不晓得而已:-)
4.典范示例
4.1小菜一碟
上面以示例为申明,来论述本文的基础划定规矩,具体见正文内容。
(1)界说接口

interfaceIPerson
{
voidGetSex();
}(2)界说类
publicclassPerson
{
publicPerson()
{
}

publicPerson(stringname,intage)
{
_name=name;
_age=age;
}

privatestring_name;

publicstringName
{
get{return_name;}
set{_name=value;}
}

privateint_age;

publicintAge
{
get{return_age;}
set{_age=value;}
}
}
(3)界说布局
//能够承继自接口,不成承继类或布局
structFamily:IPerson
{
publicstringname;
publicintage;
publicboolsex;
publicstringcountry;
publicPersonperson;

//不成以包括显式的无参机关函数和析构函数
publicFamily(stringname,intage,boolsex,stringcountry,Personperson)
{
this.name=name;
this.age=age;
this.sex=sex;
this.country=country;
this.person=person;
}

//不成以完成protected、virtual、sealed和override成员
publicvoidGetSex()
{
if(sex)
Console.WriteLine(person.Name+"isaboy.");
else
Console.WriteLine(person.Name+"isagirl.");
}

publicvoidShowPerson()
{
Console.WriteLine("Thisis{0}from{1}",newPerson(name,22).Name,country);
}

//能够重载ToString虚办法
publicoverridestringToString()
{
returnString.Format("{0}is{1},{2}from{3}",person.Name,age,sex?"Boy":"Girl",country);
}
}
(4)测试布局和类
ASP.NET编程:[你必需晓得的.NET] 第四回:后发先至:class和struct仓酷云
登录/注册后可看大图

<br>


猜猜运转了局怎样,能够特地反省反省对这个观点的熟悉。
4.2.NET研讨
在.NET框架中,System.Drawing定名空间中的有些元素,如System.Drawing.Point就是完成为struct,而不是class。其缘故原由也正在于以上先容的各方面的衡量,人人能够就此研讨研讨,能够体味更多。别的,另有以struct完成的System.Guid。
5.结论
对基础观点的掌控,是我们举行手艺深切探究的必经之路,本系列的大旨也是可以从基础框架中,供应给人人一个通向初级手艺的?课程。本文关于class和struct的会商就是云云,在.NET框架中,关于class和struct的会商将触及到对援用范例和值范例的熟悉,而且进一步将触角伸向变量内存分派这一初级主题,以是我们有需要来懂得其运转机制,掌控区分和使用场所,以便在寻常的体系计划中掌控好对这一观点条理的掌控。
别的,请人人就以下成绩举行会商,但愿可以加倍明晰本文的拓展:

ASP.NET编程:[你必需晓得的.NET] 第四回:后发先至:class和struct仓酷云
登录/注册后可看大图

<br>
参考文献
(USA)StanleyB.Lippman,C#Primer
(USA)C#inaNutshell

作者: 老尸    时间: 2015-1-21 05:38
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
作者: 若天明    时间: 2015-1-24 14:51
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者: 变相怪杰    时间: 2015-1-25 14:38
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
作者: 第二个灵魂    时间: 2015-1-25 23:33
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者: 冷月葬花魂    时间: 2015-2-4 12:37
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
作者: 兰色精灵    时间: 2015-2-5 23:39
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者: 活着的死人    时间: 2015-2-7 16:42
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
作者: 深爱那片海    时间: 2015-3-7 00:51
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
作者: 爱飞    时间: 2015-3-11 02:56
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
作者: 不帅    时间: 2015-3-12 15:35
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者: 飘灵儿    时间: 2015-4-3 05:51
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。




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