C\#new 와 override 의 차이 분석

2966 단어 newoverride
어제 면접 에서 뉴 의 몇 가지 용법 과 오 버 라 이 드 와 의 차 이 를 물 어 봤 는데 좀 모호 해 요.
돌아 와 구 글 에서 뉴 의 용법 은 다음 과 같다.
1.연산 자:대상 초기 화 및 구조 함수 호출
2.수정자:기본 클래스 숨 기 는 방법
3.일반적인 성명 에서 유형 매개 변수 로 사용 할 수 있 는 매개 변수의 유형 을 제약 합 니 다.
수정자 와 override 의 차이 점 에 대해 서 는 다음 글 을 보면 잘 모 르 겠 습 니 다.예 를 들 어 실행 결과 차이 점 을 발 견 했 습 니 다.다음은 코드 를 공유 하 겠 습 니 다. 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
  class Program
  {
    abstract public class Test
    {
      public virtual void Prinf()
      {
        Console.WriteLine("Abstract Printf...");
      }
 
    }
    public class Class1 : Test
    {
      public override void Prinf()
      {
         
        Console.WriteLine("Class One Override Printf...");
      }
    }
    public class Class2 : Test
    {
      public new void Prinf()
      {
         
        Console.WriteLine("Class Two New Printf...");
      }
    }
 
    static void Main(string[] args)
    {
      Class1 cls1 = new Class1();
      Class2 cls2 = new Class2();
      cls1.Prinf();
      cls2.Prinf();
      ((Test)cls1).Prinf();
      ((Test)cls2).Prinf();
      Console.ReadLine();
    }
  }
}
실행 결 과 는 다음 과 같 습 니 다.

여러분 도 알 아 보 셨 을 거 라 고 믿 습 니 다.그 렇 군요.
new 기본 클래스 방법 을 숨 긴 후 기본 형식 으로 전환 하여 기본 클래스 의 가상 방법 을 호출 할 수 있 습 니 다.
한편,override 는 기본 클래스 의 방법 을 완전히 재 작성 하 였 으 며,하위 형식 을 기본 형식 으로 바 꾸 더 라 도 재 작성 후의 방법 을 호출 하 였 다.
그래서 new 는 기본 클래스 를 숨 기 는 방법 이 고,Override 는 기본 클래스 를 다시 쓰 는 방법 입 니 다.
override 는'덮어 쓰기'를 말 하 며,하위 클래스 가 부모 클래스 를 덮어 쓰 는 방법 을 말한다.하위 클래스 의 대상 은 부모 클래스 의 이 방법 에 더 이상 접근 할 수 없습니다.new 는'숨 기기'를 말 하 며,하위 클래스 에 부모 클래스 를 숨 기 는 방법 을 말한다.물론 일정한 전환 을 통 해 하위 클래스 의 대상 에서 부모 클래스 를 방문 할 수 있 는 방법 이다.그 러 니까 C\#new 와 override 의 차 이 는 덮어 쓰기 와 숨 기기 입 니 다.
    다음은 코드:

class Base 
{
	public virtual void F1() 
	{
		Console.WriteLine("Base's virtual function F1");
	}
	public virtual void F2() 
	{
		Console.WriteLine("Base's virtual fucntion F2");
	}
}
class Derived:Base 
{
	public override void F1() 
	{
		Console.WriteLine("Derived's override function F1");
	}
	public new void F2() 
	{
		Console.WriteLine("Derived's new function F2");
	}
}
class Program 
{
	public static void Main(string[] args) 
	{
		Base b1 = new Derived();
		//            ,           F1  。  OO       
		b1.F1();
		//       new        ,                
		b1.F2();
	}
}

좋은 웹페이지 즐겨찾기