仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 842|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之[你必需晓得的.NET] 第二回:对笼统编程:接口和笼统类仓酷云 ...

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:25:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)系列文章目次索引:《你必需晓得的.NET
本文将先容以下内容:

•面向对象头脑:多态
•接口
•笼统类
1.弁言
在我之前的一篇post《笼统类和接口的谁是谁非》中,和同事管伟的会商,失掉良多伴侣的存眷,由于是不成系统的论道,以是给人人懂得形成方便,同时关于这个主题的体系性实际,我以为也有需要做以总结,因而才有了本篇的奇怪出炉。同时,我将把上贴中的成绩特地也在此做以交卸。
2.观点引进


  • 甚么是接口?
接口是包括一组虚办法的笼统范例,个中每种办法都有其称号、参数和前往值。接口办法不克不及包括任何完成,CLR同意接口能够包括事务、属性、索引器、静态办法、静态字段、静态机关函数和常数。可是注重:C#中不克不及包括任何静态成员。一个类能够完成多个接口,当一个类承继某个接口时,它不但要完成该接口界说的一切办法,还要完成该接口从其他接口中承继的一切办法。
界说办法为:


publicinterfaceSystem.IComparable
{
intCompareTo(objecto);
}

publicclassTestCls:IComparable
{
publicTestCls()
{
}

privateint_value;
publicintValue
{
get{return_value;}
set{_value=value;}
}

publicintCompareTo(objecto)
{

//利用as形式举行转型判别
TestClsaCls=oasTestCls;
if(aCls!=null)
{

//完成笼统办法
return_value.CompareTo(aCls._value);
}
}
}

  • 甚么是笼统类?
笼统类供应多个派生类共享基类的大众界说,它既能够供应笼统办法,也能够供应非笼统办法。笼统类不克不及实例化,必需经由过程承继由派生类完成其笼统办法,因而对笼统类不克不及利用new关头字,也不克不及被密封。假如派生类没有完成一切的笼统办法,则该派生类也必需声明为笼统类。别的,完成笼统办法由overriding办法来完成。
界说办法为:

///<summary>
///界说笼统类
///</summary>
abstractpublicclassAnimal
{
//界说静态字段
protectedint_id;

//界说属性
publicabstractintId
{
get;
set;
}

//界说办法
publicabstractvoidEat();

//界说索引器
publicstringthis[inti]
{
get;
set;
}
}

///<summary>
///完成笼统类
///</summary>
publicclassDog:Animal
{
publicoverrideintId
{
get{return_id;}
set{_id=value;}
}

publicoverridevoidEat()
{
Console.Write("DogEats.")
}
}
3.不异点和分歧点
3.1不异点


  • 都不克不及被间接实例化,都能够经由过程承继完成其笼统办法。
  • 都是面向笼统编程的手艺基本,完成了诸多的计划形式。
3.2分歧点


  • 接口撑持多承继;笼统类不克不及完成多承继。
  • 接口只能界说笼统划定规矩;笼统类既能够界说划定规矩,还大概供应已完成的成员。
  • 接口是一组举动标准;笼统类是一个不完整的类,侧重族的观点。
  • 接口能够用于撑持回调;笼统类不克不及完成回调,由于承继不撑持。
  • 接口只包括办法、属性、索引器、事务的署名,但不克不及界说字段和包括完成的办法;笼统类能够界说字段、属性、包括有完成的办法。
  • 接口能够感化于值范例和援用范例;笼统类只能感化于援用范例。比方,Struct就能够承继接口,而不克不及承继类。
经由过程不异与分歧的对照,我们只能说接口和笼统类,各有所长,但无优略。在实践的编程理论中,我们要视详细情形来酌情量才,可是以下的履历和堆集,也许能给人人一些启发,除我的一些堆集以外,良多都来历于典范,我信任经得起磨练。以是在划定规矩与场所中,我们进修这些典范,最主要的是学乃至用,固然我将以一家之言广博家之笑,看官请持续。
3.3划定规矩与场所

  • 请记着,面向对象头脑的一个最主要的准绳就是:面向接口编程。
  • 借助接口和笼统类,23个计划形式中的良多头脑被奇妙的完成了,我以为其精华复杂说来就是:面向笼统编程。
  • 笼统类应次要用于干系亲切的对象,而接口最合适为不相干的类供应通勤奋能。
  • 接口侧重于CAN-DO干系范例,而笼统类则侧重于IS-A式的干系;
  • 接口多界说对象的举动;笼统类多界说对象的属性;
  • 接口界说可使用public、protected、internal和private润色符,可是几近一切的接口都界说为public,缘故原由就不用多说了。
  • “接口稳定”,是应当思索的主要要素。以是,在由接口增添扩大时,应当增添新的接口,而不克不及变动现有接口。
  • 只管将接口计划乐成能单一的功效块,以.NETFramework为例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包括一个大众办法。
  • 接口称号后面的年夜写字母“I”是一个商定,正如字段名以下划线开首一样,请保持这些准绳。
  • 在接口中,一切的办法都默许为public。
  • 假如估计会呈现版本成绩,能够创立“笼统类”。比方,创立了狗(Dog)、鸡(Chicken)和鸭(Duck),那末应当思索笼统出植物(Animal)来应对今后大概呈现风马牛的事变。而向接口中增加新成员则会强迫请求修正一切派生类,偏重新编译,以是版本式的成绩最好以笼统类来完成。
  • 从笼统类派生的非笼统类必需包含承继的一切笼统办法和笼统会见器的实完成。
  • 对笼统类不克不及利用new关头字,也不克不及被密封,缘故原由是笼统类不克不及被实例化。
  • 在笼统办法声明中不克不及利用static或virtual润色符。
以上的划定规矩,我就恬不知耻的暂定为T14条吧,写的这么累,就当一时的夸奖吧。人人也能够互通有没有,我将实时订正。
4.典范示例
4.1相对典范
.NETFramework是进修的最好资本,无意识的研讨FCL是每一个.NET程序员的?课,关于接口和笼统类在FCL中的利用,我有以下的倡议:

  • FCL对汇合类利用了基于接口的计划,以是请存眷System.Collections中关于接口的计划完成;
  • FCL对数据流相干类利用了基于笼统类的计划,以是请存眷System.IO.Stream类的笼统类计划机制。
4.2别样小菜
上面的实例,由于是我的了解,因而给典范打上“绝对”的暗号,至于甚么时分提升为“相对”,就看我在.NET寻求的路上,是不是可以自始自终的云云固执,因而我将把绝对重构到相对为止(呵呵)。本示例没有论述笼统类和接口在计划形式中的使用,由于那将是另外一篇有会商代价的文本,本文着眼与观点和准绳的掌控,可是真实的使用来自于详细的需求标准。
计划布局如图所示:

<br>
1.界说笼统类
publicabstractclassAnimal
{
protectedstring_name;

//声明笼统属性
publicabstractstringName
{
get;
}

//声明笼统办法
publicabstractvoidShow();

//完成一样平常办法
publicvoidMakeVoice()
{
Console.WriteLine("Allanimalscanmakevoice!");
}
}
2.界说接口
publicinterfaceIAction
{
//界说大众办法标签
voidMove();
}
3.完成笼统类和接口

publicclassDuck:Animal,IAction
{
publicDuck(stringname)
{
_name=name;
}

//重载笼统办法
publicoverridevoidShow()
{
Console.WriteLine(_name+"isshowingforyou.");
}

//重载笼统属性
publicoverridestringName
{
get{return_name;}
}

//完成接口办法
publicvoidMove()
{
Console.WriteLine("Duckalsocanswim.");
}

}

publicclassDog:Animal,IAction
{
publicDog(stringname)
{
_name=name;
}

publicoverridevoidShow()
{
Console.WriteLine(_name+"isshowingforyou.");
}

publicoverridestringName
{
get{return_name;}
}

publicvoidMove()
{
Console.WriteLine(_name+"alsocanrun.");
}

}
4.客户端完成

publicclassTestAnmial
{
publicstaticvoidMain(string[]args)
{
Animalduck=newDuck("Duck");
duck.MakeVoice();
duck.Show();

Animaldog=newDog("Dog");
dog.MakeVoice();
dog.Show();

IActiondogAction=newDog("Abigdog");
dogAction.Move();
}
}
5.参考之资
正所谓真谛是人人看出来的,以是将园子里有立异性的概念潜列于此,一是感激人人的共享,二是完美一家之言的不敷,但愿可以将范畴构成常识,受用于我,受用于众。


  • dunai以为:笼统类是提取详细类的公因式,而接口是为了将一些不相干的类“杂凑”成一个配合的群体。至于他们在各个言语中的句法,言语细节并非我体贴的重点。
  • 桦山涧的保藏也很不错。
  • Artech以为:所代码共用和可扩大性思索,只管利用AbstractClass。固然接口在其他方面的上风,我以为也不成无视。
  • shenfx以为:当在差别较年夜的对象间追求功效上的个性时,利用接口;当在个性较多的对象间追求功效上的差别时,利用笼统基类。
最初,MSDN的倡议是:


  • 假如估计要创立组件的多个版本,则创立笼统类。笼统类供应复杂易行的办法来把持组件版本。经由过程更新基类,一切承继类都随变动主动更新。另外一方面,接口一旦创立就不克不及变动。假如必要接口的新版本,必需创立一个全新的接口。
  • 假如创立的功效将在年夜局限的全异对象间利用,则利用接口。笼统类应次要用于干系亲切的对象,而接口最合适为不相干的类供应通勤奋能。
  • 假如要计划小而简洁的功效块,则利用接口。假如要计划年夜的功效单位,则利用笼统类。
  • 假如要在组件的一切完成间供应通用的已完成功效,则利用笼统类。笼统类同意部分完成类,而接口不包括任何成员的完成。
6.结论
接口和笼统类,是论坛上、教室间会商最多的话题之一,之以是将这个老话题拿出来再议,是由于从我的体味来讲,深入的了解这两个面向对象的基础内容,关于盘活面向对象的笼统化编程头脑相当主要。本文基础概略了接口和笼统类的观点、异同和利用划定规矩,从进修的概念来看,我以为这些总结已足以表达其中心。可是,关于面向对象和软件计划的深切了解,仍是创建在不休理论的基本上,Scott说本人天天保持一个小时用来写Demo,那末我们是否是更应当勤于键盘呢。关于接口和笼统类,请多用而知其然,多想而知其奥吧。

<br>
参考文献
(USA)JeffreyRichter,AppliedMicrosoft.NETFrameworkProgramming
若天明 该用户已被删除
9#
发表于 2015-3-24 16:43:12 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
小妖女 该用户已被删除
8#
发表于 2015-3-17 18:08:32 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
透明 该用户已被删除
7#
发表于 2015-3-11 01:31:05 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-6 12:08:32 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
再现理想 该用户已被删除
5#
发表于 2015-2-19 02:25:31 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
山那边是海 该用户已被删除
地板
发表于 2015-2-15 14:00:45 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
只想知道 该用户已被删除
板凳
发表于 2015-2-4 13:18:46 | 只看该作者
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-26 07:06:14 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
活着的死人 该用户已被删除
楼主
发表于 2015-1-21 05:38:31 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表