C#中new的用法有三种:
(1)new是运算符,用于建立对象和挪用组织函数。如Class1=new Class1();也能够为值范例挪用默许的组织函数如int a=new int();此时a=0.
(2)new是修饰符,用于隐蔽基类成员的继续成员。override不能隐蔽积聚成员的继续成员。如:
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是束缚。用在泛型中增加范例的束缚。
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的区分剖析详解的细致内容,更多请关注ki4网别的相干文章!