C# New关键字学习总结

开发 后端
这里介绍C# New关键字学习总结,C# New关键字可以在派生类中隐藏基类的方法,也就说在使用派生类的方法是调用的方法是C# New关键字新定义出来的方法,而不是基类的方法。

思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的复习了下在C#中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来,方便大家查阅。

一、在C#中,new这个关键字使用频率非常高,主要有3个功能:

1)作为运算符用来创建一个对象和调用构造函数。

2)作为修饰符。

3)用于在泛型声明中约束可能用作类型参数的参数的类型。

在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,C# New关键字可以在派生类中隐藏基类的方法,也就说在使用派生类的方法是调用的方法是C# New关键字新定义出来的方法,而不是基类的方法。在不使用C# New关键字来隐藏基类方法也是可以的,编译器会出现一个警告,提示如果有意去隐藏基类的方法,请使用C# New关键字修饰。

这里有个注意事项就是New和Override这两个关键字是互斥的。不可以同时使用。

二、 Override关键字主要是提供派生类对基类方法的新实现,重写的基类方法必须和Override的方法具有相同的签名,此关键字不可以用于重写非虚方法和静态方法,与其配套使用的关键字是Virtual、abstract、Override。与此同时,Override方法还不可以修改Virtual方法的可访问性,Override方法和Virtual方法必须具有相同的访问修饰符,不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

以下是一个小demo,展示了new和override的本质区别:

 

  1. class  Program{  
  2. static void Main(string[] args){  
  3. contact ct1 = new class2();  
  4. contact ct2 = new class2();  
  5. ct1.prinf();  
  6. ct2.prinf();  
  7. }  
  8. }  
  9. abstract public class contact{  
  10. public virtual void prinf(){  
  11. Console.WriteLine ("这是虚方法");  
  12. }  
  13. }  
  14. public class class1 : contact{  
  15. public override void prinf(){  
  16. Console.WriteLine ("这是新的方法");  
  17. }  
  18. }  
  19. public class class2 : contact{  
  20. public new void prinf(){  
  21. Console.WriteLine ("这是另一个新的方法");  
  22. }  

三、Virtual关键字允许在派生类中重写这些对象,默认情况下,方法是非虚拟的,不可以重写非虚方法,virtual关键字不可以与static、abstract、 private、override一起使用。Virtual关键字又是和override紧密不可分的,如果要实现Virtual方法就必须要使用 override或C# New关键字(new和override产生的机理不同)。

总结:C# New关键字主要用来区别派生类和基类同名方法的选择问题,通过隐藏基类方法,达到使编译器调用正确的方法的目的。Override主要用来对基类的方法和虚方法进行重写。

【编辑推荐】

  1. 如何用C#和ADO.NET访问
  2. 浅析C# Switch语句
  3. C#验证输入方法详解
  4. 简单介绍C# 匿名方法
  5. C# FileSystemWatcher对象
责任编辑:佚名 来源: 博客园
相关推荐

2024-06-04 17:02:38

newC#编程语言

2009-09-02 09:24:03

C# this关键字

2009-08-21 14:58:56

C# this关键字

2009-08-13 13:04:29

C# lock关键字

2009-08-26 15:16:29

C# lock关键字

2009-08-06 17:52:23

C#增加that关键字

2009-08-13 17:44:34

C# using关键字

2009-08-21 14:47:59

C# base关键字

2009-07-31 16:34:17

dynamicC# 4.0

2009-09-01 15:25:04

C# default关

2009-08-13 09:49:16

C#关键字

2011-06-14 13:26:27

volatile

2022-01-10 18:11:42

C语言应用技巧

2023-03-24 08:01:27

Go语言内存

2010-01-15 15:45:10

VB.NET New关

2010-03-08 08:39:54

类加载器newJava

2024-05-29 14:09:00

C#编程this

2024-07-09 08:00:48

C#var​关键字

2011-07-14 23:14:42

C++static

2011-06-21 09:50:51

volatile
点赞
收藏

51CTO技术栈公众号