C#中关于new的用法以及和override的区别分析详解


本文摘自PHP中文网,作者黄舟,侵删。

这篇文章主要介绍了C#中new的用法,及与override的区别,需要的朋友可以参考下

C#中new的用法有三种:

(1)new是运算符,用于创建对象和调用构造函数。如Class1=new Class1();也可以为值类型调用默认的构造函数如int a=new int();此时a=0.

(2)new是修饰符,用于隐藏基类成员的继承成员。override不能隐藏积累成员的继承成员。如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace A

{

   

  class Program

  {

    abstract public class Test

    {     

      public virtual void Prinf()

      {

        Console.WriteLine("Abstract Printf...");

      }

    }

    public class Class1 : Test

    {

       

      public override void Prinf()

      {

 

        Console.WriteLine("Class One Override Printf...");

      }

        

    }

 

    public class Class2 : Test

    {

      public new void Prinf()

      {

 

        Console.WriteLine("Class Two New Printf...");

      }

    }

  

     

    static void Main(string[] args)

    {

 

      Class1 cls1 = new Class1();

      Class2 cls2 = new Class2();

      cls1.Prinf();

      cls2.Prinf();

      ((Test)cls1).Prinf();

      ((Test)cls2).Prinf();

 

      Console.ReadLine();   

 

    }

  }

}

运行结果表明:new修饰符隐藏了重写方法,通过将派生对象转为为基类对象,调用了基类的方法。而override则是完全重写了方法,即便是转为基类对象也调用的也是派生类的重写方法。

即:new隐藏的基类方法,override重写基类方法。

(3)new是约束。用在泛型中添加类型的约束。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace A

{

  class Test<T>

    where T : new()//定义类型T的约束,表示T类型必须有不带参数的构造函数

  {

    public T GetItem()

    {

      return new T();//如果不添加new()约束,编译错误:变量类型“T”没有 new() 约束,因此无法创建该类型的实例

              //想一下,T类型不知道,编译器不知道分配多大的空间,所以会通过反射技术实现

    }

  }

  class TClass

  {

    private int a;

     

    public TClass() //如果不添加无参构造函数,编译错误:TClass必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“A.Test<T>”中的参数“T”

    {

 

    }

    public TClass(int a)

    {

      this.a = a;

    }

  }

 

  class Program

  {

   

    static void Main(string[] args)

    {

      Test<TClass> test = new Test<TClass>();

 

      Console.ReadLine();   

 

    }

  }

}

以上就是C#中关于new的用法以及和override的区别分析详解的详细内容!

相关阅读 >>

C# 文件下载四方法

详情介绍C#中winform实现多线程异步更新ui的示例代码

C#学习之面向对象如何调用类以及普通方法、静态方法的使用

简单介绍C#中list<t>对象的深度拷贝问题

formdragger在C#中实现窗体拖拽器的方法详解

C# 常用函数总集

实现C#遍历文件夹及子目录下所有图片的示例代码分享

详细介绍data url生成工具C#版第二版的示例代码

详解C#创建dll类库的方法分享(图文)

C#thread同步mutex的代码详解

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...