简述微课的特点c#的性能及特点

C#特性 详细介绍 - 简书
C#特性 详细介绍
1、什么是Atrribute ******首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。下面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过头来讨论Attribute这个类本身。(文中的代码使用C#编写,但同样适用所有基于.NET的所有语言)
2、Attribute作为编译器的指令**在C#中存在着一定数量的编译器指令,如:#define DEBUG, #undefine DEBUG, #if等。这些指令专属于C#,而且在数量上是固定的。而Attribute用作编译器指令则不受数量限制。比如下面的三个Attribute:
Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。
DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。
Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。下面的代码演示了上述三个属性的使用:
1#define DEBUG //这里定义条件
4using System.Runtime.InteropS
5using System.D
7namespace AttributeDemo
class MainProgramClass
[DllImport("User32.dll")]
public static extern int MessageBox(int hParent, string Message, string Caption, int Type);
static void Main(string[] args)
DisplayRunningMessage();
DisplayDebugMessage();
MessageBox(0,"Hello","Message",0);
Console.ReadLine();
[Conditional("DEBUG")]
private static void DisplayRunningMessage()
Console.WriteLine("开始运行Main子程序。当前时间是"+DateTime.Now);
[Conditional("DEBUG")]
//[Obsolete("Don't use Old method, use New method", true)]
[Obsolete]
private static void DisplayDebugMessage()
Console.WriteLine("开始Main子程序");
如果在一个程序元素前面声明一个Attribute,那么就表示这个Attribute被施加到该元素上,前面的代码,[DllImport]施加到MessageBox函数上, [Conditional]施加到DisplayRuntimeMessage方法和DisplayDebugMessage方法,[Obsolete]施加到DisplayDebugMessage方法上。
根据上面涉及到的三个Attribute的说明,我们可以猜到程序运行的时候产生的输出:DllImport Attribute表明了MessageBox是User32.DLL中的函数,这样我们就可以像内部方法一样调用这个函数。
重要的一点就是Attribute就是一个类,所以DllImport也是一个类,Attribute类是在编译的时候被实例化的,而不是像通常的类那样在运行时候才实例化。Attribute实例化的时候根据该Attribute类的设计可以带参数,也可以不带参数,比如DllImport就带有"User32.dll"的参数。Conditional对满足参数的定义条件的代码进行编译,如果没有定义DEBUG,那么该方法将不被编译,读者可以把#define DEBUG一行注释掉看看输出的结果(release版本,在Debug版本中Conditional的debug总是成立的)。Obsolete表明了DispalyDebugMessage方法已经过时了,它有一个更好的方法来代替它,当我们的程序调用一个声明了Obsolete的方法时,那么编译器会给出信息,Obsolete还有其他两个重载的版本。大家可以参考msdn中关于的ObsoleteAttribute 类的描述。
3、Attribute类**除了.NET提供的那些Attribute派生类之外,我们可以自定义我们自己的Attribute,所有自定义的Attribute必须从Attribute类派生。现在我们来看一下Attribute 类的细节:
protected Attribute(): 保护的构造器,只能被Attribute的派生类调用。
三个静态方法:
static Attribute GetCustomAttribute():这个方法有8种重载的版本,它被用来取出施加在类成员上指定类型的Attribute。
static Attribute[] GetCustomAttributes(): 这个方法有16种重载版本,用来取出施加在类成员上指定类型的Attribute数组。
static bool IsDefined():由八种重载版本,看是否指定类型的定制attribute被施加到类的成员上面。
实例方法:
bool IsDefaultAttribute(): 如果Attribute的值是默认的值,那么返回true。
bool Match():表明这个Attribute实例是否等于一个指定的对象。
公共属性: TypeId: 得到一个唯一的标识,这个标识被用来区分同一个Attribute的不同实例。
我们简单地介绍了Attribute类的方法和属性,还有一些是从object继承来的。这里就不列出来了。
下面介绍如何自定义一个Attribute: 自定义一个Attribute并不需要特别的知识,其实就和编写一个类差不多。自定义的Attribute必须直接或者间接地从Attribute这个类派生,如:
public MyCustomAttribute : Attribute { ... }
这里需要指出的是Attribute的命名规范,也就是你的Attribute的类名+"Attribute",当你的Attribute施加到一个程序的元素上的时候,编译器先查找你的Attribute的定义,如果没有找到,那么它就会查找“Attribute名称"+Attribute的定义。如果都没有找到,那么编译器就报错。
4、定义或控制特性的使用**
对于一个自定义的Attribute,你可以通过AttributeUsage的Attribute来限定你的Attribute 所施加的元素的类型。代码形式如下:******[AttriubteUsage(参数设置)] public 自定义Attribute : Attribute { ... }**
非常有意思的是,AttributeUsage本身也是一个Attribute,这是专门施加在Attribute类的Attribute. AttributeUsage自然也是从Attribute派生,它有一个带参数的构造器,这个参数是AttributeTargets的枚举类型。下面是AttributeTargets 的定义:
public enum AttributeTargets 2
All=16383, 4
Assembly=1, 5
Module=2, 6
Class=4, 7
Struct=8, 8
Enum=16, 9
Constructor=32,10
Method=64,11
Property=128,12
Field=256,13
Event=512,14
Interface=1024,15
Parameter=2048,16
Delegate=4096,17
ReturnValue=819218
public enum AttributeTargets 2
All=16383, 4
Assembly=1, 5
Module=2, 6
Class=4, 7
Struct=8, 8
Enum=16, 9
Constructor=32,10
Method=64,11
Property=128,12
Field=256,13
Event=512,14
Interface=1024,15
Parameter=2048,16
Delegate=4096,17
ReturnValue=819218
作为参数的AttributeTarges的值允许通过“或”操作来进行多个值得组合,如果你没有指定参数,那么默认参数就是All 。 AttributeUsage除了继承Attribute 的方法和属性之外,还定义了以下三个属性:
AllowMultiple: 读取或者设置这个属性,表示是否可以对一个程序元素施加多个Attribute 。
Inherited:读取或者设置这个属性,表示是否施加的Attribute 可以被派生类继承或者重载。
ValidOn: 读取或者设置这个属性,指明Attribute 可以被施加的元素的类型。
下面让我们来做一些实际的东西。我们将会在Help特性前放置AttributeUsage特性以期待在它的帮助下控制Help特性的使用。
[AttributeUsage(AttributeTargets.Class), AllowMultiple = false,
Inherited = false ]
public class HelpAttribute : Attribute
public HelpAttribute(String Description_in)
this.description = Description_
protected S 11
public String Description 12
return this. 16
先让我们来看一下AttributeTargets.Class。它规定了Help特性只能被放在class的前面。这也就意味着下面的代码将会产生错误:
[Help("this is a do-nothing class")] 2
public class AnyClass 3
[Help("this is a do-nothing method")] //error 5
public void AnyMethod() 6
编译器报告错误如下:
  AnyClass.cs: Attribute 'Help' is not valid on this declaration type.
  It is valid on 'class' declarations only.
我们可以使用AttributeTargets.All来允许Help特性被放置在任何程序实体前。可能的值是:
  Assembly,Module,Class,Struct,Enum,Constructor,Method,Property,Field,Event,Interface,Parameter,Delegate。
  All = Assembly | Module | Class | Struct | Enum | Constructor | Method | Property | Field | Event | Interface | Parameter | Delegate,
  ClassMembers = Class | Struct | Enum | Constructor | Method | Property | Field | Event | Delegate | Interface )
  下面考虑一下AllowMultiple = false。它规定了特性不能被重复放置多次。
[Help("this is a do-nothing class")] 2
[Help("it contains a do-nothing method")] 3
public class AnyClass 4
[Help("this is a do-nothing method")] //error 6
public void AnyMethod() 7
它产生了一个编译期错误。
  AnyClass.cs: Duplicate 'Help' attribute
  Ok,现在我们来讨论一下最后的这个属性。Inherited, 表明当特性被放置在一个基类上时,它能否被派生类所继承。
[Help("BaseClass")] 2
public class Base 3
public class Derive : Base 7
这里会有四种可能的组合:
  [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false ]
  [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false ]
  [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true ]
  [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true ]
  第一种情况:
  如果我们查询(Query)(稍后我们会看到如何在运行期查询一个类的特性)Derive类,我们将会发现Help特性并不存在,因为inherited属性被设置为false。
  第二种情况:
  和第一种情况相同,因为inherited也被设置为false。
  第三种情况:
  为了解释第三种和第四种情况,我们先来给派生类添加点代码:
[Help("BaseClass")] 2
public class Base 3
[Help("DeriveClass")] 6
public class Derive : Base 7
现在我们来查询一下Help特性,我们只能得到派生类的属性,因为inherited被设置为true,但是AllowMultiple却被设置为false。因此基类的Help特性被派生类Help特性覆盖了。
  第四种情况:
  在这里,我们将会发现派生类既有基类的Help特性,也有自己的Help特性,因为AllowMultiple被设置为true。
文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical enterprise application does not consist of a single object (or bean in the Spring pa...
转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一. Runtime简介Runtime 又叫运行时,是一套底层的 C 语言 API,是 iOS 系统的核心之一。开发者在编码过程中,可以给任意一个对象发送消息,在编...
深入浅出Attribute(中)——Attribute本质论
小序: 上篇里,我们把Attribute“粘”在类的成员方法上show了一把,让Attribute跟大家混了个脸儿熟。中篇里,我们将探讨“究竟什么是Attribute”和“如何创建及使用At...
{ &Unterminated string literal.&: &未终止的字符串文本。&, &Identifier expected.&: &应为标识符。&, &'{0}' expected.&: &应为“{0}”。&, &A file cannot have a re...
{ &Unterminated string literal.&: &未终止的字符串文本。&, &Identifier expected.&: &应为标识符。&, &'{0}' expected.&: &应为“{0}”。&, &A file cannot have a re...
倒计时58天 去年年底格冷MM突然发微信问我明年2月份有没有兴趣去西班牙朝圣之旅,那时的我对这条路线完全没有感念,条件反射的回复说OK。聊完天后去搜了一下什么是“朝圣之旅”,(这个名字听上去太酷了),偶然的机会找到了《脚在地狱,心在天堂--圣地亚哥朝圣之路》这篇帖子,仔细看...
你当了妈,却丢掉了自己(妈妈们都看哭了)
辣妈帮 引导关注 折现分割线 怀胎十月,一朝分娩,在宝宝的哭声中,女人迎来人生中最重要的时刻,一心想着做个幸福的辣妈,却在琐碎生活中认清了现实。女人呐,只有生完孩子,才知道原来生活变了个样。 01 为了生孩子,...
一位父亲把初入青春期的儿子暴揍了一顿之后,到家长群里抱怨孩子不好管教。学校对学生良好学习习惯的训练已经持续一年了,孩子的独立性、学习自主性、自我管理能力还是没有养成。儿子说做作业要用手机。父亲找老师求证,得知老师并没有要求必须用手机做作业,于是判定儿子撒谎,目的是为了玩手机...
前段时间实习,每天忙得晕头转向,正是寒冬赖床之际却要每天“一鼓作气”从被窝里爬出来,路灯还未及时熄灭就迈着小短腿追公交,一沾椅子就开始打盹。学校的事情也多,总是会有忙不完的工作,总会有这个或那个孩子嚷着跟一本正经的“告状”,那个时候偏偏还有教学主任突然给我加的任务,加上自己...
在如今这个人人都追捧互联网的时代,移动互联网的发展更是势不可挡。H5游戏也如雨后春笋般蓬勃生长。在iWeb峰会现场,梦工场创始人田爱娜提到“这是一个突破的一年,H5梦工场收获各种一起守望坚持的人,这也是一个新的时代,是一个好的时代,坚持、挑战、创造是这个时代的基因,这也是最...C#基础知识归纳_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#基础知识归纳
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩27页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢c#语言的特点是什么_百度知道
c#语言的特点是什么
c#语言的特点是什么
我有更好的答案
在功能与效率的杠杆上人们终于找到了支点,RAD)的思想与简洁的语法将会使你迅速成为一名熟练的开发人员。 正如前文所述,C#是专门为,而不会象在C++或java中经常发生的那样不经意地被进行,这可以防止代码级错误和保留版本化的特性。另一个相关的特性是接口和接口继承的支持。这些特性可以保证复杂的软件可以被方便地开发和升级。六、灵活性和兼容性在简化语法的同时,C#并没有失去灵活性。尽管它不是一种无限制语言,比如:它不能用来开发硬件驱动程序,在默认的状态下没有指针等等,但是,在学习过程中你将发现,它仍然是那样的灵巧。如果需要,C#允许你将某些类或者类的某些方法声明为非安全的。这样一来,你将能够使用指针、结构和静态数组,并且调用这些非安全代码不会带来任何其它的问题。此外,它还提供了一个另外的东西(这样的称呼多少有些不敬)来模拟指针的功能--delegates,代表。再举一个例子:C#不支持类的多继承,但是通过对接口的继承,你将获得这一功能。下面谈安全性。正是由于其灵活性,C#允许与C风格的需要传递指针型参数的API进行交互操作,DLL的任何入口点都可以在程序中进行访问。C#遵守.NET公用语言规范(Common Language Specification,CLS),从而保证了C#组件与其它语言组件间的互操作性。元数据(Metadata)概念的引入既保证了兼容性,又实现了类型安全。、与Web的紧密结合,很有可能导致程序的崩溃,如OLE_COLOR、BOOL,从而避免了类型定义的混乱。在后面的学习中你很快会发现,C#中没有了全局函数,从Internet和Intranet下载的代码都不允许访问任何本地文件和资源。比方说,一个在网络上的共享目录中运行的程序,如果它要访问本地的一些资源,那么异常将被触发,其对象模型是.NET基础架构的一部分,而不再是其本身的组成部分.NET中新的应用程序开发模型意味着越来越多的解决方案需要与Web标准相统一,比如&quot,现存的一些开发工具不能与Web紧密地结合。SOAP的使用使得C#克服了这一缺陷,当局部变量未经初始化而被使用时。语法中的冗余是C++中的常见的问题,这不但减轻了编程人员的工作量,同时更有效地避免了错误的发生,它将会无情地被异常扔出去,若拷贝到本地硬盘上运行则一切正常。整个C#的类模型是建立在.NET虚拟对象系统(Visual Object System.NET应用而开发出的语言。这从根本上保证了C#与.NET框架的完美结合,C#使得开发人员的生产效率得到极大的提高。对于公司而言。在C#的类型系统中,寻找与改正这些简单错误的代价将会是让人无法承受的。C#的先进设计思想可以消除软件开发中的许多常见错误,并提供了包括类型安全在内的完整的安全性能,C#也不会给你带来任何其它的麻烦,快速应用程序开发(Rapid Application Development。每种C#操作符在.NET类库中都有了新名字.。这些错误常常产生难以预见的后果。一旦这样的软件被投入使用.NET框架的各种优点在C#中表现得淋漓尽致,现在需要理解的一切仅仅是名字的嵌套而已,大规模深层次的分布式开发从此成为可能。由于有了Web服务框架的帮助。这样就可以有效的处理各种数据。四、完整的安全性与错误处理语言的安全性与错误处理能力..。C#对此进行了简化。借助于从VB中得来的丰富的RAD经验,C#具备了良好的开发环境,C#的代码在.NET框架提供的“可操纵”环境下运行,面向对象的话题就始终缠绕着任何一种现代程序设计语言..:函数重载必须被显式声明。C#提供了一个叫做装箱(boxing)与拆箱(unboxing)的机制来完成这种操作,而不给使用者带来麻烦。为了减少开发中的错误,C#会帮助开发者通过更少的代码完成相同的功能。仅需要使用简单的C#语言结构,C#组件将能够方便地为Web服务,即使是最熟练的程序员也不例外:忘记变量的初始化,是衡量一种语言是否优秀的重要依据。任何人都会犯错误,C#建造广泛组件的绝对选择,例如超文本标记语言(Hypertext Markup Language、VARIANT_BOOL、DISPID_XXXXX等等.,”)已经不再出现,也没有了全局常数。一切的一切,都必须封装在一个类之中。你的代码将具有更好的可读性,并且减少了发生命名冲突的可能,只保留了常见的形式,为了提高效率,C#允许直接将XML数据映射成为结构,但在这里还不得不提到C++,XML已经成为网络中数据结构传递的标准:”。为了帮助开发人员处理这些问题,C#在语言中内置了版本控制功能。例如,当进行下行指向时,C#将自动验证指向的有效性;C#中提供了边界检查与溢出检查功能。五、版本处理技术C#提供内置的版本支持来减少开发费用,编译器将做出提醒;C#不支持不安全的指向,不能将整数指向引用类型,例如对象.NET运行库的支持下,,即一个类不会有多个基类。.NET运行库提供了代码访问安全特性,它允许管理员和用户根据代码的ID来配置安全等级。在缺省情况下。三。让我们来看看C#的一些突出的特点,相信在以后的学习过程中,你将会深深体会到“#”--“SHARP”的真正含义。●简洁的语法●精心地面向对象设计●与Web的紧密结合●完整的安全性与错误处理●版本处理技术●灵活性与兼容性一;”和“,软件开发周期的缩短将能使它们更好应付网络经济的竞争,每种类型都可以看作一个对象。在缺省的情况下,而别的冗余形式从它的语法结构中被清除了出去。结合自身强大的面向对象功能、“-&gt,对程序员来说,网络服务看起来就象是C#的本地对象。程序员们能够利用他们已有的面向对象的知识与技巧开发Web服务。升级软件系统中的组件(模块)是一件容易产生错误的工作。在代码修改过程中可能对现存的软件产生影响,这样做的另一个好处是兼容性,没有了全局变量。C#中不能使用未初始化的变量,对象的成员变量由编译器负责将其置为零,从高级商业对象到系统级应用、简洁的语法请原谅,虽然我们一再强调学习本书不需要任何的编程基础,通过精心地面向对象设计、继承与多态性,这并不出奇。然而,使用C#将会使开发人员更加轻易地开发和维护各种商业用户。内存管理中的垃圾收集机制减轻了开发人员对内存管理的负担。在。二、各种各样的字符类型等等C#语言的特点C#在带来对应用程序的快速开发能力的同时,并没有牺牲C与C++程序员所关心的各种特性。它忠实地继承了C和C++的优点。如果你对C或C++有所了解,你会发现它是那样的熟悉。即使你是一位新手,VOS)的基础之上;const&和&quot,.,HTML)和XML、精心地面向对象设计也许你会说,从Smalltalk开始。与此相关的是,那些在C++中被疯狂使用的操作符(例如:“:,对不属于自己管理范围的内存空间进行修改,这在以后的章节中将进行更为详细的介绍。C#只允许单继承,GC)将负责资源的释放与对象撤销时的内存清理工作。变量是类型安全的,不允许直接地内存操作。它所带来的最大的特色是没有了指针。.NET平台提供的垃圾收集器(Garbage Collection。C#用真正的关键字换掉了那些把活动模板库(Active Template Library,ALT)和COM搞得乱糟糟的伪关键字。在下面将会谈到。C#只支持一个“.”,对于我们来说,并允许它们通过Internet被运行在任何操作系统上的任何语言所调用。举个例子。的确,C#具有面向对象的语言所应有的一切特性:封装。由于历史的原因;#define&
采纳率:33%
#是专门为。比C和C++易学,比C和C++开发效率高。系统底层控制能力略逊于C和C++.NET应用而开发出的语言。这从根本上保证了C#与.NET框架的完美结合.C#是Microsoft主推的语言,特别是基于ASP.NET的网站开发和ADO.NET的数据库开发。执行效率略逊于C和C++(常规程序效率基本相同)。适合桌面和Web应用程序开发,XP,及windows7)。目前暂时只能用于Windows下(2000
严格,专业,组件,接口
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。.NET各个版本之间的关系&  &版本及开发工具和语言&      &&2002年&&&      2003年&&&        2005年&&      2006年&&      2008年&&& 开发工具&&&& Visual        &Visual Studio.Net&&&&&&& Visual Studio&&&  &Visual Studio&   Visual Studio    &
       Studio.Net&      &2003&&        &&&2005&       2005+扩展     &2008&    &&      &2002&&                   &
  语言&  &C#1.0        &&&C#1.1&&       C#2.0&&     &&& 没有变化      C#3.0&&&&&&&     &C#5.0&&&&&&&&   C#6.0&&
      VB.NET(V7.0)&&    VB.NET(V7.1)&&    VB.NET(V8.0)&&&            VB.NET(V9.0)  &VB.NET(V7.0)&&&   VS2013
  CLR&&  CLR& V1.0&&      CLR& V1.1      &&CLR& V2.0&    CLR V2.0&      CLR V2.0&    CLR4.5&    &CLR 4.5.1
C#语言新特性&&(1)自动属性和属性访问器的保护级别&&&  例如:prublic int ID{}&&(2)可空类型:允许值类型变量为空.&&  &语法:Nullable&T&,也可以写成T?,T必须是值类型.&&&  system.Nullable&T&中的结构体成员&&&&&&& &构造函数:Nullable&T&:初始化Nullable&T&结构体并为其指定值.&&&&&&& &方法:Equals:比较跟传入的对象是否相等&&&& & GetHashCode:返回当前对象值的Hash码.&&&& && &GetType:获取当前实例的类型&&&& & &&GetValueOrDefault:获取对象的值或默认值.&&&&&& & ToString:以文本字符串的形式返回当前对象的值.&&&&&&&&&运算符:Explicit:返回Nullable&T&的值.&&&&& & &Implicit:创建Nullable&T&对象,然后给其赋值.&&&&&& & 属性:HasValue:当前对象是否有值.&&&&&& & Value:当前对象的值.
(3)泛型:泛型的使用可以提高代码的重用率,保护类型安全和提高性能.&&&&&&&& 优点:执行速度快,不需要装箱和拆箱,安全(线程安全)(4)对象和集合初始化器:&&  &对象初始化器:由一些成员初始化器组成,包含在花括号中间,用逗号分隔.每个成员初始化器以对象的一个可访问的字段或属性的名字开始的.&&&&&&&& 后面跟一个等号,之后是一个表达式,或一个对象,或一个集合初始化器.&&  &集合初始化器:集合初始化器由一系列包括在花括号之间的元素初始化器构成,元素初始化器之间使用逗号进行分隔,元素初始化器不能是赋值表达式.(5)匿名类型:匿名类型一般出现在LINQ的select字句中,用来投影筛选出的数据.匿名类型创建的属性是只读的,不允许包含除了属性以外的成员,不能强制转换为object以外的类型或接口.(6)扩展方法:必须是静态类的静态方法(是一种建立在非泛型,非嵌套的静态类中的特殊方法).是针对Landba而来的.&&&&&& 特点:1.在某些情况下,父类不允许继承,通过扩展方法来实现非继承方法的添加.&&&&    2.在继承关系中,我们通常继承一个对象(包括对象中扩展方法)之后对子类进行扩展写法.&&&&    3.父类指向子类称为逆变,子类指向父类称为协变.&&&   & 4.扩展方法的名称如果和类型的成员方法重名,扩展方法永远不会被调用,扩展方法无法修改类型内部的源代码,所以在类型升级后,扩展方法可能会失效.
(7)匿名方法和Lamdba表达式:匿名方法就是方法中的方法,Lamdba表达式将匿名方法的语法进一步简化.&&&&&&& Lamdba表达式的语法:(input parameters)=&expression&&&&&&&& 注释:()中表示输入参数,expression表示表达式,运算符"=&"读为goes to.&&&&&&&&
阅读(...) 评论()

我要回帖

更多关于 简述运输合同的特点 的文章

 

随机推荐