C#语法小知识(八)扩展

扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。  扩展方法是一种特殊的静态方法,但可以像普通方法一样进行调用。  对于用 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) 会将把调用代码转换为对静态方法进行调用。  因此,并未真正违反封装原则。  实际上,扩展方法无法访问它们所扩展的类型中的私有变量。


通常,建议只在不得已的情况下才实现扩展方法,并谨慎地实现。 必须要注意的是:如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。


总结:

  1. 定义一个静态以包含扩展方法。该类必须对客户端代码可见。  有关可访问性规则的更多信息,请参见访问修饰符(C# 编程指南)  

  2. 将该扩展方法实现为静态方法,并使其至少具有与被扩展类型相同的可见性。

  3. 该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。

  4. 在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间

  5. 按照与实例方法一样的语法调用扩展方法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值