C#语法小知识(八)扩展
2016-09-23 18:47
288 查看
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。
扩展方法是一种特殊的静态方法,但可以像普通方法一样进行调用。
对于用 C#,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。
示例,为Int32(也就是int)添加扩展方法:using System;
public static class Int32Extensions
{
public static Int32 Digit(this Int32 num)
{
return (Int32)Math.Log10 (num) + 1;
}
public static Int32 bit(this Int32 num)
{
return (Int32)(Math.Log (num) / Math.Log(2)) + 1;
}
}扩展方法被定义为静态方法,但当它被调用的时候,使用的是示例方法的语法。
第一个参数指定该方法作用于(被添加到)哪个类型,并且该参数以 this修饰符为前缀。
仅当使用 using 指令将命名空间(本文示例没有namespace,就不需要使用using)显式导入到源代码中之后,扩展方法才可以使用。
使用:
int i = 4020;
Console.WriteLine (i.Digit ());
Console.WriteLine (i.bit ());
编译器生成的中间语言 (IL) 会将把调用代码转换为对静态方法进行调用。
因此,并未真正违反封装原则。
实际上,扩展方法无法访问它们所扩展的类型中的私有变量。
通常,建议只在不得已的情况下才实现扩展方法,并谨慎地实现。 必须要注意的是:如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。
总结:
定义一个静态类以包含扩展方法。该类必须对客户端代码可见。 有关可访问性规则的更多信息,请参见访问修饰符(C#编程指南)。
将该扩展方法实现为静态方法,并使其至少具有与被扩展类型相同的可见性。
该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。
按照与实例方法一样的语法调用扩展方法。
相关文章推荐
- c#调用COM组件
- php7 扩展类的写法[2]
- php7 类的方法传参[3]
- php7 读取php.ini[4]
- 主页木马的制作方法
- 解密网页加密的两个方法
- C#实现把指定数据写入串口
- 定义标题的最好方法
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- Ruby简明教程之方法(Method)介绍
- Ruby基础知识之方法、代码段