C# 3.0扩展重载抉择

开发 后端
这里介绍C# 3.0扩展重载抉择,将对扩展方法的调用也纳入到重载抉择的范畴之内,并且规定扩展方法拥有最低的优先级。

C# 3.0语言有很多值得学习的地方,这里我们主要介绍C# 3.0扩展重载抉择,包括介绍调用实例方法Func等方面。

C# 3.0扩展重载抉择

看了上面的介绍我们不难发现一个问题:如果一个类型中的某个实例方法与扩展方法的签名等价(这里说“等价”是因为扩展方法与调用形式一样的实例方法相比,要多一个表示被扩展类型的参数,也就是***个有this修饰符的参数),那么当在被扩展类型的对象上调用方法时,就会产生冲突。我们将这种冲突称为重载抉择问题。C# 3.0扩展重载抉择,将对扩展方法的调用也纳入到重载抉择的范畴之内,并且规定扩展方法拥有***的优先级。也就是说,对于一组特性类型、特定顺序的参数列表,只有当被扩展类型中没有得以匹配的方法时,才考虑从扩展方法中选择一个最合适的方法进行调用。

现在,我们为上面的SampleExtensions类再添加一个用于扩展SampleClass类型的扩展方法Func:

  1. public static void Func(this SampleClass s)  
  2. {  
  3. s.Val = -1;  
  4. Console.WriteLine("Am I appearing?");  

如果用调用实例方法的语法调用这个扩展方法,则其调用形式与调用无参的实例方法Func完全一致。再次编译并运行原来的程序,输出的结果并没有改变,也就是说这个扩展方法根本没有被调用,实际被调用的方法是实例方法Func。当然,如果将这个扩展方法作为普通的静态方法进行调用是没有问题的。

另外如果两个静态类中为同一个类型定义了签名一致的静态方法,则***定义的静态方法具有较高的优先级;而同一程序集中定义的静态方法优先级高于用using语句从其他命名空间中导入的扩展方法;***,如果两个命名空间中包含签名一致的扩展方法,则***引入的命名空间中的扩展方法优先级较高。以上介绍C# 3.0扩展重载抉择

【编辑推荐】

  1. C# System.Xml集合
  2. C#实现Strategy接口
  3. C#编写操作TreeView组件剖析
  4. C#实现IDisposable接口浅析
  5. C#异常处理详细剖析
责任编辑:佚名 来源: 搜狐IT
相关推荐

2009-08-27 16:24:48

扩展方法C# 3.0新特性

2009-08-25 17:15:50

C#隐藏C#重写C#重载

2009-08-19 14:42:21

C#重载LoadPos

2009-07-31 16:00:30

C#函数重载

2009-08-27 18:04:01

c#扩展方法string

2009-08-10 17:36:17

C#扩展方法

2009-09-01 11:28:32

C#使用函数重载

2009-06-12 09:41:07

EJB3.0Spring

2009-09-04 13:18:10

C#允许运算符重载

2009-08-12 10:27:12

C#运算符重载运算符重载实例

2009-08-12 10:56:47

C#运算符重载C#运算符重载实例

2009-08-14 10:16:57

C#运算符重载

2009-09-01 11:04:59

C#调用扩展方法

2009-09-18 15:53:37

C# 3.0新语言特性

2009-08-31 14:45:10

C#扩展方法

2009-08-28 14:25:57

C# byte数组

2009-09-02 17:08:30

C#语言开发Windo

2009-08-18 18:06:54

C#操作符重载

2009-08-18 17:42:12

C#操作符重载

2009-08-18 17:55:20

C#操作符重载
点赞
收藏

51CTO技术栈公众号