C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法
新建一个.NET Core项目,假如我们有如下代码:
using System; namespace MethodOverload
{ static class DemoExtension
{
public static int GetNumber(this Demo d,int i)
{
Console.WriteLine("DemoExtension GetNumber was called!");
return i;
}
} class Demo
{
public int GetNumber(int i)
{
Console.WriteLine("Demo GetNumber was called!");
return i;
}
} class Program
{
static void Main(string[] args)
{
Demo demo = new Demo(); demo.GetNumber(); Console.WriteLine("Press any key to end...");
Console.ReadLine();
}
}
}
我们可以在VisualStudio中看到demo.GetNumber方法有一个重载:


一个是Demo类中定义的GetNumber方法,还有个是DemoExtension类中定义的GetNumber扩展方法,那么我们在调用demo.GetNumber(100)时,到底调用的哪个方法呢?
执行结果如下:

可以看到是Demo类中定义的GetNumber方法被调用了,所以如果说有扩展方法和类本身的方法签名相同,C#会优先调用类本身的方法。
假如现在我们注释掉Demo类中定义的GetNumber方法:
using System; namespace MethodOverload
{ static class DemoExtension
{
public static int GetNumber(this Demo d,int i)
{
Console.WriteLine("DemoExtension GetNumber was called!");
return i;
}
} class Demo
{
//public int GetNumber(int i)
//{
// Console.WriteLine("Demo GetNumber was called!");
// return i;
//}
} class Program
{
static void Main(string[] args)
{
Demo demo = new Demo(); demo.GetNumber(); Console.WriteLine("Press any key to end...");
Console.ReadLine();
}
}
}
现在执行结果如下:

这次我们看到调用的就是DemoExtension类中定义的GetNumber扩展方法了
C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法的更多相关文章
- python在交互模式下直接输入对象后回车,调用的是对象的__repr__()方法,这个方法表示的是一个编码,用print+对象是调用对象的__str__方法
交互模式下调用对象的__repr__()方法,这个方法表示的是一个编码 >>> u"国庆节快乐"u'\u56fd\u5e86\u8282\u5feb\u4e50' ...
- 多态&&父类调用子类特有的方法
/* 多态 1.没有继承就没有多态 2.代码的体现:父类类型的指针指向子类对象 3.好处:如果函数\方法参数使用的是父类对象,可以传入父类.子类对象 4.局限性: 1>父类类型的变量,不能直接调 ...
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
1. 概述 bindService() 绑定服务 可以得到服务的代理人对象,间接调用服务里面的方法. 绑定服务: 间接调用服务里面的方法. 如果调用者activity被销毁了, ...
- 错误 在类中找不到main方法请将main方法定义为 public static void main String args否则JavaFX应用程序类必须扩展javafx-ap
最近在使用eclipse编写java程序时遇到这样一个问题: 错误在类中找不到main方法,请将main方法定义为 public static void main(String[] args)否则 J ...
- 错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap
最近在使用eclipse编写java程序时遇到这样一个问题: 错误在类中找不到main方法,请将main方法定义为 public static void main(String[] args)否则 J ...
- 错误: 在类 Main 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application
错误: 在类 Main 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)否则 JavaFX 应用程序类必须扩展ja ...
- 错误: 在类中找不到 main 方法, 请将 main 方法定义为:    public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application 。
昨天在eclipse编写JAVA程序时,遇到一个问题: 错误: 在类中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] a ...
- Unity中对系统类进行扩展的方法
Unity扩展系统类,整合简化代码 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- ASP.Net string 类的扩展方法 [转]
string 类的扩展方法列表(基本相同于 IEnumerable<T> 接口的成员列表): Aggregate<> //累加 All<> / ...
随机推荐
- asp.net使用一般处理程序实现文件下载
首先有一个html页面,页面有一个链接,点击链接弹出文件下载/保存(类似迅雷下载链接) <!DOCTYPE html> <html> <head> <meta ...
- 用字典给Model赋值并支持map键值替换
用字典给Model赋值并支持map键值替换 这个是昨天教程的升级版本,支持键值的map替换. 源码如下: NSObject+Properties.h 与 NSObject+Properties.m / ...
- 为什么有时候NSData转换成NSString的时候返回nil
为什么有时候NSData转换成NSString的时候返回nil 有时候,NSData明明有值,可是,当转换成NSString的时候,却没有值,现在来进行测试:) -现在提供测试用素材- 源码如下: / ...
- [C++] 用Xcode来写C++程序[3] Constants
用Xcode来写C++程序[3] Constants 以下是一些基本数据的含义: 75 // int 75u // unsigned int 75l // long 75ul // unsigned ...
- CSS学习摘要-定位
CSS学习摘要-定位 注:全文摘自MDN-CSS定位 定位允许您从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的同一位置. 本文解释的是定位 ...
- 铁乐学python_day09_作业
练习题 1.整理函数相关知识点,写博客 2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素, 并将其作为新列表返回给调用者. def odd_index(l): lis = [] for ...
- Hibernate查询(HQL——Hibernate Query Language)
HQL查询 HQL提供了是十分强大的功能,它是针对持久化对象,用取得对象,而不进行update,delete和insert等操作.而且HQL是面向对象的,具备继承,多态和关联等特性. from子句: ...
- 【ansible】Windows开启远程控制错误解决方案:无法检查防火墙状态
这个在老版本的Windows系统才有这种bug.例如Windows 2008 R2和Windows 7,如果你的系统的阿里云的Windows server 2008 R2,无需装这个,好像阿里云的系统 ...
- Array.prototype.reduce 的理解与实现
Array.prototype.reduce 是 JavaScript 中比较实用的一个函数,但是很多人都没有使用过它,因为 reduce 能做的事情其实 forEach 或者 map 函数也能做,而 ...
- 【洛谷】【动态规划/二维背包】P1855 榨取kkksc03
[题目描述:] ... (宣传luogu2的内容被自动省略) 洛谷的运营组决定,如果...,那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkks ...