>백엔드 개발 >C#.Net 튜토리얼 >추상 클래스 재작성을 구현하기 위해 new와 override를 사용하는 C#의 차이점에 대한 자세한 설명

추상 클래스 재작성을 구현하기 위해 new와 override를 사용하는 C#의 차이점에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-06 11:12:051685검색

이 글에서는 C#에서 new와 override를 사용하여 추상 클래스를 다시 작성하는 것의 차이점에 대한 자세한 설명을 주로 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 이제 공유하고 참고용으로 제공하겠습니다. 편집자를 따라가서 살펴보겠습니다.

1. 추상 구현

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

위 그림의 결과는 다음과 같습니다.

요약하자면, 추상 클래스의 가상 메서드를 다시 작성해야 합니다. 그렇다면 다시 작성하는 방법에는 두 가지가 있습니다

2. 신규 재작성과 재정의 재작성의 차이점:

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

결과는 다음과 같이 표시됩니다. 🎜>

요약하자면:

1. 기본 클래스가 가상 메서드를 정의하지 않는 경우 하위 클래스는 다음과 같습니다. new만 사용할 수 있고 override

는 사용할 수 없습니다. 2. 기본 클래스가 가상 메서드를 정의하는지 여부에 관계없이 하위 클래스는 new를 사용할 수 있습니다

3. 하위 클래스에서 new를 사용하는 것을 다시 작성이라고 하지 않습니다. 서브 클래스를 새로 생성했는데 새로 생성된 메서드가 기본 클래스의 메서드와 이름이 같은 경우가 발생했습니다.

위는 C#에서 new를 사용하는 것과 override를 사용하는 경우의 차이점에 대한 자세한 설명입니다. 추상 클래스 재작성 구현 관련 내용은 PHP 중국어 넷(www.php.cn)을 참고하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.