重写(override)和重载(overload)的区别
1).重写(override)
override是重写(覆盖)了一个方法,以实现不同的功能,一般的用于子类在继承父类时,重写(重新实现)父类的方法,实现不同的需求。
重写(覆盖)的规则:
1.重写的方法必须是virtual,abstract或者是override(virtual修饰符不能与static,abstract,private或override修饰符一起使用,静态属性上使用virtual修饰符会报错)。
2.重写方法的参数列表必须完全与被重写的方法相同,否则不能称为重写而是重载。
3.重写的方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
4.重写的方法的返回值必须和被重写的方法返回值一致。
5.重写的方法所抛出的异常必须和被重写的方法所抛出的异常一致,或是其子类(eg:父类的一个方法申明了一个检查异常IOException,在重写这个方法就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常)。
6.被重写的方法不能为private,否则在其子类中只是定义了一个新的方法,并没有对其重写。
7.静态方法不能被重写为非静态方法(会编译出错)。
8.子类不能重写父类中的final修饰的方法。

1 /// <summary> 2 /// 定能基类动物类 3 /// </summary> 4 /// <returns></returns> 5 public class Animal 6 { 7 public virtual void Eatting() 8 { 9 Console.WriteLine("用嘴吃饭!"); 10 } 11 } 12 13 #region 重写(覆盖原则) 14 15 public class Pople : Animal 16 { 17 public override void Eatting() //基类必须是virtual方法 18 { 19 Console.WriteLine("人用筷子吃饭!"); 20 } 21 } 22 23 public class Monkey : Animal 24 { 25 public new void Eatting() 26 { 27 Console.WriteLine("猴子直接用手吃饭!"); 28 } 29 } 30 31 32 #endregion 33 34 /// <summary> 35 /// 方法重载和冲写的区别 36 /// </summary> 37 /// <param name="args"></param> 38 public static void Main(string[] args) 39 { 40 var pople = new Pople(); 41 (pople as Animal).Eatting(); //打印【人用筷子吃饭!】 42 pople.Eatting();//打印【人用筷子吃饭!】 43 44 var monKey = new Monkey(); 45 (monKey as Animal).Eatting();//打印【用嘴吃饭!】 46 monKey.Eatting();//打印【猴子直接用手吃饭!】 47 48 Console.ReadKey(); 49 }
2).重载(overload)
overload是重载,一般是用于在一个类实现若干重载的方法,这些方法的名称相同参数不同。
重载的规则:
1.在使用重载时只能通过相同的方法名,不同的参数形式类实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)。
2.不能通过访问权限,返回类型,抛出的异常进行重载。
3.方法的异步类型和数目不会对重载造成影响。

1 using System; 2 using System.Threading.Tasks; 3 4 namespace OverReadOverLoadDifference 5 { 6 class Program 7 { 8 #region 方法重载 9 10 /// <summary> 11 /// 定义计算类 12 /// </summary> 13 public class Calculation 14 { 15 public int sunMation(int a) 16 { 17 return a; 18 } 19 20 public int sunMation(int a, int b) 21 { 22 return a + b; 23 } 24 } 25 26 #endregion 27 28 /// <summary> 29 /// 方法重载 30 /// </summary> 31 /// <param name="args"></param> 32 public static void Main(string[] args) 33 { 34 #region 重载 35 var calculation = new Calculation(); 36 Console.WriteLine(calculation.sunMation(1)); 37 Console.WriteLine(calculation.sunMation(2, 3)); 38 #endregion 39 40 Console.ReadKey(); 41 } 42 } 43 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!