仓酷云

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

[学习教程] ASP.NET网页设计C#中为何不克不及承继List?仓酷云

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

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

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

x
归根到底,net网页编程跨平台可以,但是要重新编写代码,否则还分什么J2EE/J2SE/J2ME呢!成绩:
每当构想我的程序时,我常常会有以下连续串的思索:
一个足球队是一群足球活动员的汇合,因而,我能够用上面的代码来声明:
1
varfootball_team=newList<FootballPlayer>();

这个list的排序按次就是这些活动员在混名册里的按次。可是以后我又意想到除活动员外,球队另有其余属性也必要纪录。好比说这个赛季的总得分,以后的预算,球服的色彩,用string范例暗示的球队名字,等等。
以是我以为:
既然一个球队就是一群活动员的汇合,可是分外的,它有一个名字(string范例)和一个以后总得分(int范例)。.NET没有供应一个用来存储球队的类,以是我得本人界说一个类。和现有布局最靠近的是List<FootballPlayer>,以是我将承继它:
1
2
3
4
5
classFootballTeam:List<FootballPlayer>
{
publicstringTeamName;
publicintRunningTotal
}

可是了局是,我被提醒不克不及承继List<T>。关于这个提醒,我有两点困惑:
为何不克不及?
明显List某种水平是对功能的优化,怎样做到的?假如我承继了List对功能会有甚么影响?究竟带来了甚么?
别的,List是微软供应的,我不克不及把持它,当它对外界表征为“publicAPI”我就不克不及修正它。可是我很难了解甚么是PublicAPI,为何我要体贴它?假如我的项目不必要大概基本没有如许的publicAPI,我是否是就能够忽视谁人提醒?假如我不承继List那末我便必要一个PublicAPI,我该怎样办理?为何它这么主要呢,一个list就是个list,有甚么大概改动的呢?我大概想要改动甚么呢?
最初,假如微软不但愿我承继List,为何不给List类加sealed润色符呢?
除此以外我该利用甚么?
明显,关于自界说的汇合,微软供应了能够承继的Collection类来代替List。可是这个类功效很少,没有供应良多有效的工具,好比说AddRange。
承继Collection比承继List要多做良多活,并且我找不到长处。微软必定不会告知我往做分外的活,以是我以为某种水平上我曲解了甚么,并且实践上关于我的成绩承继Collection也不是一个好的办理计划。
我也看到一些办理计划,好比完成IList。可是我不会这么做,几十行的典范代码让我以为甚么用途也没有。
终极,一些人倡议我这么利用List:
1
2
3
4
classFootballTeam
{
publicList<FootballPlayer>Players;
}

可是这么做有两个成绩:
1.它使我的代码变得不用要的冗杂。我必定要挪用my_team.Players.Count而不是my_team.Count。感谢的是,用C#我能够界说索引器来创立索引,然后传送List中的一切外部办法。可是我要写良多代码。做那末多的活我失掉了甚么?
2.这只是埋怨没有其余意义。一个足球队不是包括一组活动员,它就是一组活动员。你不会说JohnMcFootballer已到场了某个球队的活动员汇合里,你会说JohnMcFootballer到场了某个球队。你不会说把一个字母到场到一串字符串的字母汇合里,你会说把一个字符到场一串字符串里。你不会说把一本书放到一个藏书楼的图书汇合里,你会说把一本书放到一个藏书楼里。
我入手下手意想到为何会如许了,实在能够说成“把x增加到y的外部汇合里”,可是如许的体例思索天下仿佛是违反常理的。
我的成绩(总结)
用C#表达逻辑(也就是说,从人类的思索体例)是list之类的带有钟声和口哨的数据布局,准确的办法是甚么?
是否是承继List<T>一向不会被承受?大概说甚么时分能够?为何能或不克不及?当决意是不是承继List<T>,一个程序员必要思索甚么?
最好谜底:(来自EricLippert,他是微软的一位资深软件计划工程师,之前伯乐在线翻译过他的一些博文)
已有良多很好的谜底,我很愿意在他们的基本上增补几点。
用C#表达逻辑(也就说说,从人类的思索体例)是list之类的带有钟声和口哨的数据布局,准确的办法是甚么?
让恣意十个非盘算机程序员而且熟习足球的人来填写上面这句话的空缺处:
一个足球队是一种特定的__________
有任何一团体写“带有钟声和口哨的活动员汇合”吗,大概仍是都写“活动队”、“俱乐部”、“构造”?足球队是一种特定的活动员汇合这个观点只是你年夜脑中的设法而且也只是你罢了。
List<T>是一种机制。足球队是一种贸易对象——也就是说,在程序中,这类对象是在营业逻辑范畴中的一种观点。不要搅浑了这些。足球队就是一个团队,它有一个混名册,混名册是一组活动员汇合。它就是活动员的汇合。以是界说一个属性叫Roster暗示List<Player>,而且当你利用时,界说成
1
ReadOnlyList<Player>

除非你以为每一个人都能够失掉球队的混名册而且能够从中删除队员。
是否是承继List<T>一向不会被承受?
不克不及被谁承受?我吗?不是。
甚么时分能够?
当你必要创立一种必要承继List<T>机制的机制的时分。
当决意是不是承继List<T>,一个程序员必要思索甚么?
我是在创立一种机制仍是创立一个营业对象?
我要写良多代码。做那末多的活我失掉了甚么?
你花了大批的工夫把你的成绩敲打出来,这个工夫已够你把与List<T>相干联的成员办法写上50遍以上了。明显你是不怕冗杂的,我们在这里会商的只是几行代码,这是几分钟的事情。
更新
因为二次编译器太复杂,那么建议只是在安装程序的时候编译一次,而不类似net网页编程那样运行就编译。并且我觉得,一次痛苦,总比多次低效率要舒服多了。
不帅 该用户已被删除
9#
发表于 2015-3-24 03:44:54 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
小女巫 该用户已被删除
8#
发表于 2015-3-17 08:35:00 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
海妖 该用户已被删除
7#
发表于 2015-3-10 17:54:08 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
精灵巫婆 该用户已被删除
6#
发表于 2015-3-8 15:22:03 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
兰色精灵 该用户已被删除
5#
发表于 2015-2-8 23:51:49 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
admin 该用户已被删除
地板
发表于 2015-2-8 11:58:24 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-2-6 09:25:38 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
小魔女 该用户已被删除
沙发
发表于 2015-2-6 01:46:12 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
金色的骷髅 该用户已被删除
楼主
发表于 2015-1-29 14:14:31 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-25 07:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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