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扩展重载抉择

标题名称:C#3.0扩展重载抉择
URL标题:http://www.shufengxianlan.com/qtweb/news2/304552.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联