Home > Article > Backend Development > Detailed analysis of the usage of new in C# and the difference between it and override
This article mainly introduces the usage of new in C# and the difference with override. Friends in need can refer to the usage of new in
C# There are three types:
(1) new is the operator , used to create objects and call constructors . For example, Class1=new Class1(); you can also call the default constructor for the value type, such as int a=new int(); at this time a=0.
(2)new Is a modifier used to hide inherited members of base class members. Override cannot hide inherited members of accumulated members. For example:
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(); } } }
The running results show that: the new modifier hides the overridden method, and calls the base class method by converting the derived object into a base class object. Override completely rewrites the method. Even if it is converted to a base class object, the overridden method of the derived class is also called.
That is: new hidden base class method, override rewrite base class method.
(3)new is constraint. Used to add type constraints to generics.
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(); } } }
The above is the detailed content of Detailed analysis of the usage of new in C# and the difference between it and override. For more information, please follow other related articles on the PHP Chinese website!