仓酷云

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

[学习教程] ASP.NET教程之C# 3.0新特性之创立和初始化汇合工具

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:41:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。创立|工具|汇合<P>  1、弁言

  C#3.0中新的工具初始化器是一种复杂的语法特性-借助于这类特性,工具的构建和初始化变得十分复杂。假定你有一个类Student,它看起来有以下模样:

publicclassStudent{
 publicstringfirstName;
 publicstringlastName;
}
  那末,你可使用工具初始化器来创立这个类的一个工具,以下所示:

varstudent1=newStudent{firstName="Bruce",lastName="Willis"};
  C#3.0中新的汇合初始化器语法也具有相似操纵特性。比方,完成System.Collections.Generic.ICollection<T>的任何工具都可使用一个汇合初始化器来初始化它的值。

  一个汇合初始化器由以下部分构成:

  ・一个工具初始化器序列,用"{"和"}"标记包含,而且由逗号离隔。

  ・元素初始化器,它们中每个都指定一个元素以被增加到指定的汇合工具中(元素初始化器不克不及是一个汇合初始化器中的赋值表达式)。

  那末,事实它是怎样事情的呢?一个汇合初始化器必需遵守以下划定规矩:

  ・使用汇合初始化器的每个汇合工具必需是一种完成了System.Collections.Generic.ICollection<T>的范例(刚好针对一个T)。

  ・必需存在从每个元素初始化器到T范例的一种隐式转换。一个汇合初始化器针对每个指定的元素城市顺次挪用ICollection<T>.Add(T)办法。

  作为一个例子,上面的汇合初始化器创立并初始化一个新的字符串汇合-这个汇合具有3个成员:"Alice","Bob"和"Chris",参考以下:

List<string>names=newList<string>{"Alice","Bob","Chris"};
  注重:一切的初始值都是字符串范例。不然,你将失掉一个编译器毛病。

  2、完成汇合初始化

  假定你想形貌一个班及个中的注册同砚。为此,你能够经由过程利用C#3.0中的汇合初始化器编程完成,以下所示:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Query;
usingSystem.Xml.XLinq;
usingSystem.Data.DLinq;
namespaceCollectionInitializer
{
 classProgram
 {
  publicclassMyClass
  {
   publicstringnameofClass;
   publicList<string>studentNames=newList<string>();
  }
  staticvoidMain(string[]args)
  {
   varclasses=newList<MyClass>
   {
    newMyClass
    {
     nameofClass="Science",
     studentNames={"Laura","George"}
    },
    newMyClass
    {
     nameofClass="Commerce",
     studentNames={"Bill","Hillary"}
    }
   };
  }
 }
}
  假如你有VisualStudio2005而且安装了LINQPreview,那末能够在IDE中编译下面的代码。

  假如你没有VS2005可是安装了LINQPreview,那末你可使用以下命令来从命令行编译该代码:

C:ProgramFilesLINQPreviewBinCsc.exe
/reference:"C:ProgramFilesLINQPreviewBinSystem.Data.DLinq.dll"
/reference:C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.Data.dll
/reference:C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.dll
/reference:"C:ProgramFilesLINQPreviewBinSystem.Query.dll"
/reference:C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.Xml.dll
/reference:"C:ProgramFilesLINQPreviewBinSystem.Xml.XLinq.dll"Program.cs
<P>  3、代码分析

  让我们更仔细地剖析一下后面的C#3.0代码:

varclasses=newList<MyClass>
{
 newMyClass
 {
  nameofClass="Science",
  studentNames={"Laura","George"}
 },
 newMyClass
 {
  nameofClass="Commerce",
  studentNames={"Bill","Hillary"}
 }
};
  关于编译器来讲,它具有与上面代码不异的效果:

varclasses=newList<MyClass>();
var__c1=newMyClass();
__c1.nameofClass="Science";
__c1.studentNames.Add("Laura");
__c1.studentNames.Add("George");
classes.Add(__c1);
var__c2=newMyClass();
__c2.nameofClass="Commerce";
__c2.studentNames.Add("Bill");
__c2.studentNames.Add("Hillary");
classes.Add(__c2);
  假如激活ILDASM而且翻开了编译的二进制代码情势,那末你可以看到如图1相似的内容。


.示例代码片段的编译的二进制情势
  假如你双击在ILDASM中的Main结点,那末你会看到以下代码:

.methodprivatehidebysigstaticvoidMain(string[]args)cilmanaged
{
 .entrypoint
 //代码巨细138(0x8a)
 .maxstack3
 .localsinit([0]class[mscorlib]System.Collections.Generic.List`1
 <classCollectionInitializer.Program/MyClass>
 classes,
 [1]class[mscorlib]System.Collections.Generic.List`1
 <classCollectionInitializer.Program/MyClass>
 <tampa>f__0,
 [2]classCollectionInitializer.Program/MyClass
 <tampa>f__1,
 [3]classCollectionInitializer.Program/MyClass
 <tampa>f__2)
 IL_0000:nop
 IL_0001:nop
 IL_0002:newobjinstancevoidclass[mscorlib]System.Collections.
 Generic.List`1<classCollectionInitializer.
 Program/MyClass>::.ctor()
 IL_0007:stloc.1
 IL_0008:ldloc.1
 IL_0009:nop
 IL_000a:newobjinstancevoidCollectionInitializer.
 Program/MyClass::.ctor()
 IL_000f:stloc.2
 IL_0010:ldloc.2
 IL_0011:ldstr"Science"
 IL_0016:stfldstringCollectionInitializer.
 Program/MyClass::nameofClass
 IL_001b:nop
 IL_001c:ldloc.2
 IL_001d:ldfldclass[mscorlib]System.Collections.Generic.List`1
 <string>CollectionInitializer.
 Program/MyClass::studentNames
 IL_0022:ldstr"Laura"
 IL_0027:callvirtinstancevoidclass[mscorlib]System.
 Collections.Generic.List`1<string>::Add(!0)
 IL_002c:nop
 IL_002d:ldloc.2
 IL_002e:ldfldclass[mscorlib]System.Collections.Generic.List`1
 <string>CollectionInitializer.
 Program/MyClass::studentNames
 IL_0033:ldstr"George"
 IL_0038:callvirtinstancevoidclass[mscorlib]System.Collections.
 Generic.List`1<string>::Add(!0)
 IL_003d:nop
 IL_003e:nop
 IL_003f:ldloc.2
 IL_0040:nop
 IL_0041:callvirtinstancevoidclass[mscorlib]System.Collections.
 Generic.List`1<classCollectionInitializer.
 Program/MyClass>::Add(!0)
 IL_0046:nop
 IL_0047:ldloc.1
 IL_0048:nop
 IL_0049:newobjinstancevoidCollectionInitializer.
 Program/MyClass::.ctor()
 IL_004e:stloc.3
 IL_004f:ldloc.3
 IL_0050:ldstr"Commerce"
 IL_0055:stfldstringCollectionInitializer.
 Program/MyClass::nameofClass
 IL_005a:nop
 IL_005b:ldloc.3
 IL_005c:ldfldclass[mscorlib]System.Collections.Generic.List`1
 <string>CollectionInitializer.
 Program/MyClass::studentNames
 IL_0061:ldstr"Bill"
 IL_0066:callvirtinstancevoidclass[mscorlib]System.Collections.
 Generic.List`1<string>::Add(!0)
 IL_006b:nop
 IL_006c:ldloc.3
 IL_006d:ldfldclass[mscorlib]System.Collections.Generic.List`1
 <string>CollectionInitializer.
 Program/MyClass::studentNames
 IL_0072:ldstr"Hillary"
 IL_0077:callvirtinstancevoidclass[mscorlib]System.Collections.
 Generic.List`1<string>::Add(!0)
 IL_007c:nop
 IL_007d:nop
 IL_007e:ldloc.3
 IL_007f:nop
 IL_0080:callvirtinstancevoidclass[mscorlib]System.Collections.
 Generic.List`1<classCollectionInitializer.
 Program/MyClass>::Add(!0)
 IL_0085:nop
 IL_0086:ldloc.1
 IL_0087:nop
 IL_0088:stloc.0
 IL_0089:ret
}//Program::Main办法停止
  4、小结

  夙昔面的一些代码片段中你能够看到,C#3.0在语法方面迈出了很年夜的一步。

  汇合初始化器,作为C#3.0新引进的特性之一,供应了一种新的语法来初始化汇合工具。这类复杂的语法把汇合工具的创立和初始化分离到一个步骤中。我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-19 21:17:46 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
柔情似水 该用户已被删除
板凳
发表于 2015-1-26 23:20:19 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
变相怪杰 该用户已被删除
地板
发表于 2015-2-4 22:20:52 | 只看该作者
那么,ASP.Net有哪些改进呢?
莫相离 该用户已被删除
5#
发表于 2015-2-10 21:41:45 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
若天明 该用户已被删除
6#
发表于 2015-3-1 15:18:53 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-3-10 19:27:29 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
兰色精灵 该用户已被删除
8#
发表于 2015-3-17 09:11:07 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-24 05:35:51 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-22 22:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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