c# 方法:分布、扩展、匿名和普通方法

c# 方法:分布、扩展、匿名和普通方法

ID:12546804

大小:72.67 KB

页数:5页

时间:2018-07-17

c# 方法:分布、扩展、匿名和普通方法_第1页
c# 方法:分布、扩展、匿名和普通方法_第2页
c# 方法:分布、扩展、匿名和普通方法_第3页
c# 方法:分布、扩展、匿名和普通方法_第4页
c# 方法:分布、扩展、匿名和普通方法_第5页
资源描述:

《c# 方法:分布、扩展、匿名和普通方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、c#方法:分布、扩展、匿名和普通方法一.概述:万事万物皆对象,孙悟空是个对象,他会摘桃子,是一种行为,这种行为就是c#中的方法,方法是有指定功能的代码块。说起方法就得说一下方法的签名:修饰符、返回值类型、方法参数。在定义方法时的参数叫“形式参数(形参)”,在调用方法时的参数叫“实际参数(实参)”。这些基本了解之后,下面开始谈几类方法:分布、扩展、匿名和普通方法。二.分布方法:要说分布方法要先说分布类:在VisualStudio中创建一个Windows窗体应用程序,打开窗体Form1的代码部分和Fo

2、rm1.Designer.cs文件,如图Form1类的修饰符有个partial关键字,没错,partial关键字就是表示此类或此方法为分布类或分布方法的,上面的例子把分布类或分布方法的好处已经体现了:可以让一个类分布在多个文件,这样就可以让多个程序员编写了,也可以让一个类的几个功能块分布在多个文件中。注意:a.partial关键字只能修饰类、结构或方法。分布方法只能存在于分布类或分布结构中。b.partial是VisualStudio的关键字,不是C#语法的关键字。在最终编译的时候,分布类会统一编

3、译成一个类,如果分布方法未提供该实现,则会在编译时移除方法以及对方法的所有调用。c.各个部分必须具有相同的可访问性,如public、private等。d.如果将任意部分声明为抽象的,则整个类型都被视为抽象的,如果将任意部分声明为密封的,则整个类型都被视为密封的,如果任意部分声明基类型,则整个类型都将继承该类。指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型,各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。e.分部方法声明必须以上下文关键字partial开头,并且

4、方法必须返回void。f.分部方法可以有ref参数,但不能有out参数。g.分部方法为隐式private方法,因此不能为virtual方法。h.分部方法不能为extern方法,因为主体的存在确定了方法是在定义还是在实现。i.分部方法可以有static和unsafe修饰符。j.分部方法可以为泛型的。约束将放在定义分部方法声明上,但也可以选择重复放在实现声明上。参数和类型参数名称在实现声明和定义声明中不必相同。a.不能将委托转换为分部方法。一.扩展方法:扩展方法使您能够向现有类型“添加”方法,而无需创

5、建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法必须是静态的,第一个参数指定该方法作用于哪个类型,并且该参数以this修饰符为前缀。举例说明:namespaceHelloWorld{usingIamExtend;classProgram{staticvoidMain(string[]args){stringstr="helloworld";Console.WriteLine(str.IamExt());//helloworld,IamExtend}}}namespaceIamExtend

6、{staticclassExtString{publicstaticstringIamExt(thisstringstr){str+=",IamExtend";returnstr;}}}细心的话会有一个疑问:IamExt是静态方法,而在调用的时候是变量str点出来的,能用变量点出来的方法不是实例化方法吗?在这里,不是!扩展方法是一种特殊的静态方法,但在代码中可以像扩展类型上的实例方法一样进行调用,实际上,编译器生成的中间语言(IL)会将代码转换为对静态方法的调用。深入思考一下:类有封装性,而上例中

7、的string是由微软定义,并且已经封装,而扩展类ExtString和string并没有继承关系,那么既然string已经封装,但现在还可以为它增加方法,是不是违反了类的封装性呢?不是!实际上,扩展方法无法访问它们所扩展的类型中的私有变量,扩展方法对它们所扩展的类型中的所有所有成员相互之间无异常,所扩展的类型中的方法或属性是public的能访问,是private还是不能访问,不干扰,无影响。注意:a.如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。a.扩展方法被放在命名空

8、间级别放入范围中。例如,如果您在同一个名为Extensions的命名空间中具有多个包含扩展方法的静态类,则这些扩展方法将全部由usingExtensions;指令放入范围中。一.匿名方法:1.先看一个例子:匿名方法就是dText=delegate(){Console.WriteLine("helloworld");};等号右边的。说一下专业名词:如果局部变量和参数的范围包含匿名方法声明,则该局部变量和参数称为该匿名方法的“外部”变量2.匿名方法的定义就不多说了,注意:a.匿名方法的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。