이 글에서는 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)을 참고하세요!