Heim >Backend-Entwicklung >C#.Net-Tutorial >Detaillierte Analyse der Verwendung von „new' in C# und des Unterschieds zwischen „new' und „override'.
In diesem Artikel wird hauptsächlich die Verwendung von new in C# vorgestellt und der Unterschied zu Override kann auf die Verwendung von
new in C# verwiesen werden Es gibt drei Typen:
(1)new ist der Operator, der zum Erstellen von Objekten und zum Aufrufen des Konstruktors verwendet wird. Beispielsweise Class1=new Class1(); Sie können auch den Standardkonstruktor für den Werttyp aufrufen, beispielsweise int a=new int(); in diesem Fall a=0.
(2)new Ist ein Modifikator, der verwendet wird, um geerbte -Mitglieder von Basisklassenmitgliedern auszublenden. Durch die Überschreibung können geerbte Mitglieder akkumulierter Mitglieder nicht ausgeblendet werden. Beispiel:
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(); } } }
Die laufenden Ergebnisse zeigen Folgendes: Der neue Modifikator verbirgt die überschriebene Methode und ruft die Basisklassenmethode auf, indem er das abgeleitete Objekt in eine Basisklasse konvertiert Objekt. Durch Überschreiben wird die Methode vollständig neu geschrieben. Auch wenn sie in ein Basisklassenobjekt konvertiert wird, wird auch die überschriebene Methode der abgeleiteten Klasse aufgerufen.
Das heißt: Neue versteckte Basisklassenmethode, Override schreibt die Basisklassenmethode neu.
(3)new ist eine Einschränkung . Wird verwendet, um Typeinschränkungen zu Generika hinzuzufügen.
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(); } } }
Das obige ist der detaillierte Inhalt vonDetaillierte Analyse der Verwendung von „new' in C# und des Unterschieds zwischen „new' und „override'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!