Dieser Artikel stellt hauptsächlich die detaillierte Erklärung des Unterschieds zwischen dem Umschreiben abstrakter Klassen mit new und override in C# vor. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es als Referenz geben. Folgen wir dem Herausgeber, um einen Blick darauf zu werfen.
1. Abstrakte Implementierung
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Virtualdemo { class Program { static void Main(string[] args) {//BClass A = new BClass(); 抽象类无法被实例 Class1 c = new Class1(); BClass c2 = c; c2.MethodA(); c.MethodA(); c2.MethodB(); c.MethodB(); c2.MethodC(); c.MethodC(); Console.ReadKey(); } } abstract class BClass //抽象类无法被实例 { public virtual void MethodA() { Console.WriteLine("BClassA"); } public virtual void MethodB() { Console.WriteLine("BClassB"); } public virtual void MethodC() { Console.WriteLine("BClassC"); } } class Class1 : BClass { public void MethodA() { Console.WriteLine("MethodA"); }//如果一个虚函数 在子类中没有通过override关键字,那么这个方法就没有被重写,而是被隐藏了 public override void MethodB() { Console.WriteLine("MethodB"); } public override void MethodC() { base.MethodC(); } } }
Das Ergebnis aus der obigen Abbildung ist:
Zusammenfassend: Die virtuellen Methoden abstrakter Klassen müssen neu geschrieben werden. Dann stellt sich die Frage: Was ist der Unterschied zwischen neu und überschreiben? >
2. Der Unterschied zwischen Neu- und Override-Umschreiben:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Virtualdemo { class Program { static void Main(string[] args) { Teacher t = new Teacher(); Student stu = t; stu.Exam(); stu.Say(); t.Say(); Console.ReadKey(); } } public abstract class Student { public virtual void Exam() { Console.WriteLine("学生都要考试"); } public void Say() { Console.WriteLine("我是学生"); } } public class Teacher : Student { public override void Exam() { Console.WriteLine("老师不用考试"); } //public override void Say() //报错,提示没有virtual,无法被重写 //{ // Console.WriteLine("我是老师"); //} public new void Say() { Console.WriteLine("我是老师"); } } }
Um es zusammenzufassen:
1. Wenn die Basisklasse keine virtuelle Klasse definiert Methode, dann nur die Unterklasse Sie können new verwenden, aber nicht überschreiben2 Unabhängig davon, ob die Basisklasse eine virtuelle Methode definiert, können Unterklassen new verwenden3 heißt Umschreiben, aber Die Unterklasse erstellt eine neue Methode, aber die neu erstellte Methode hat zufällig denselben Namen wie die Methode in der BasisklasseOben finden Sie eine detaillierte Erläuterung des Unterschieds zwischen der Verwendung von new und override in C# Um das Umschreiben abstrakter Klassen und weitere verwandte Inhalte zu implementieren, achten Sie bitte auf die chinesische PHP-Website (www.php.cn)!