知识大全 新增匿名类[3]
Posted 知
篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 新增匿名类[3]相关的知识,希望对你有一定的参考价值。
四 扩展方法
这个世界上总是存在着很多奇妙的东西 然而 在这部分所介绍的扩展方法就是其中之一 从字面上看可能读者很难猜透 扩展方法 是什么意思 然而 看了下面的例子 就会感觉到非常的奇妙
namespace ExtMethodpublic class Class public String s = bill ;public class Class : Class public static class AnyClassNamepublic static String getName(this Class class )return class s + class s; public partial class Form : Formprivate void button _Click(object sender EventArgs e)Class c = new Class ();MessageBox Show(c getName()); Class c = new Class ();MessageBox Show(c getName());看到上面的代码 也许很多人会感到奇怪 在Class 和Class 中并没有getName方法 怎么在调用时出来个getName方法呢?实际上 这就是扩展方法的用法 从本质上说 扩展方法就是将静态方法(必须声明成static)插入到某个类和其子类中(也就是说 在这些类中可以使用在外部定义的静态方法) 那么要往哪个类中插入呢?这就要在定义静态方法时指定了 大家可以看看getName方法的第一个参数 使用了this关键字 这就表明这个方法是一个扩展方法 后面的类型就是要插入该方法的类 在本例中是Class 也就是说在Class 及其子类中都可以使用getName方法 上面的调用代码也相当于下面的代码
Class c = new Class ();MessageBox Show(AnyClassName getName(c));但使用c getName可能会更好一些 而且也降低了对静态方法所在的类(AnyClassName)的依赖性
在使用扩展方法时应注意以下几点
扩展方法所在的类名可以是任意合法的类名
扩展方法所在的类必须和使用扩展方法的代码在同一个命名空间里 否则无法编译通过
在本例中 Class 和Class 只能声明成public 因为AnyClassName被声明为public 如果AnyClassName不加修饰符 Class 和Class 也可以不加修饰符 当然 也可以被声明为public 也就是说 Class 和Class 必须有比AnyClassName具有更强的访问性 如下面代码所示
class Class public String s = bill ;class Class : Class static class AnyClassName // 这时如果前面加public是无法编译通过的 public static String getName(this Class class )return class s + class s;如果在Class 或Class 中已经有getName方法了 那么Class 或Class 中的getName优先级更高 也就是说 扩展方法是无法覆蓋原类中的同名(参数名和类型也相同)的方法的
扩展方法尤其在很多类需要同样的方法 而这些类又无法继承其它类时特别有用 当然 在要对某个类进行扩展 但我们并没有源代码时 扩展方法也可以派上用场
cha138/Article/program/net/201311/15230相关参考
一用var定义变量 在C#中提供了一种新的声明变量的方式这就是var通过这个关键字在声明变量时就无需指定类型了变量类型是在初始化时由编译器确定的代码如下:varss=abcd;MessageBo
Java通过对Java语言规范进行修改显著简化了一些实用结构的实现在那些修改中最引人注目的就是内部类和匿名类如运用得当它们可使程序更易理解和维护本文介绍内部类和匿名
Java内部类与匿名内部类 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 定义在类中方法之外的内
publicinterfaceContents intvalue(); publicinterfaceDestination StringreadLabel(); publiccl
JAVA中使用内部类与匿名内部类实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JAVA中对
本文代码展示了在一个方法中通过匿名内部类定义一个Thread并Override它的run()方法之后直接启动该线程 下面的代码展示了在一个方法中通过匿名内部类定义一个Thread并Overrid
Groovy编程用Closure替代匿名类 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于内
在线文档阅读开发手记(一)) 从程序设计语言的理论上局部内部类(即定义在方法中的内部类)由于本身就是在方法内部(可出现在形式参数定义处或者方法体处)因而访
C#3.0新体验(四)匿名函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言 放了一个长
C#3.0新体验之匿名函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言 放了一个长假很