Maison  >  Article  >  développement back-end  >  Explication détaillée de la différence entre C# utilisant new et override pour implémenter la réécriture de classe abstraite

Explication détaillée de la différence entre C# utilisant new et override pour implémenter la réécriture de classe abstraite

黄舟
黄舟original
2017-03-06 11:12:051650parcourir

Cet article présente principalement l'explication détaillée de la différence entre la réécriture de classes abstraites en utilisant new et override en C#. L'éditeur pense que c'est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l’éditeur et jetons un coup d’œil.

1. Implémentation abstraite

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(); }
  }
}

Le résultat de la figure ci-dessus est :

Pour résumer : les méthodes virtuelles des classes abstraites doivent être réécrites. Ensuite, la question se pose. Il y a deux façons de réécrire. Quelle est la différence entre new et override

2. La différence entre la réécriture nouvelle et la réécriture de remplacement :

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

Le résultat est affiché comme :

Pour résumer :

1. Si la classe de base ne définit pas de virtuel. méthode, alors la sous-classe uniquement Vous pouvez utiliser new, mais pas override

2 Que la classe de base définisse une méthode virtuelle, les sous-classes peuvent utiliser new

3. L'utilisation de new dans une sous-classe ne l'est pas. appelé réécriture, mais la sous-classe crée une nouvelle méthode, mais la méthode nouvellement créée porte le même nom que la méthode de la classe de base

Ce qui précède est une explication détaillée de la différence entre C# utilisant new et override pour implémenter la réécriture de classes abstraites et d'autres contenus connexes. Veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn