Detaillierte Erläuterung des Unterschieds zwischen C#, der new und override verwendet, um das Umschreiben abstrakter Klassen zu implementieren

黄舟
Freigeben: 2017-03-06 11:12:05
Original
1646 Leute haben es durchsucht

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(); }
  }
}
Nach dem Login kopieren

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("我是老师");
    }
  }
}
Nach dem Login kopieren

Das Ergebnis ist angezeigt als:

Um es zusammenzufassen:

1. Wenn die Basisklasse keine virtuelle Klasse definiert Methode, dann nur die Unterklasse Sie können new verwenden, aber nicht überschreiben

2 Unabhängig davon, ob die Basisklasse eine virtuelle Methode definiert, können Unterklassen new verwenden

3 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 Basisklasse

Oben 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)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage