>백엔드 개발 >C++ >C#의 재정의와 숨기기: 차이점은 무엇입니까?

C#의 재정의와 숨기기: 차이점은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-18 08:32:09127검색

Overriding vs. Hiding in C#: What's the Difference?

C#의 메서드 재정의 및 메서드 숨기기

C#에서 메서드 재정의와 메서드 숨기기는 상속된 메서드를 수정하기 위한 두 가지 서로 다른 메커니즘입니다.

메서드 재정의

메서드 재정의에는 기본 클래스에 가상 메서드를 만들고 파생 클래스에서 해당 구현을 재정의하는 작업이 포함됩니다. 이를 통해 파생 클래스는 동일한 메서드 이름과 매개 변수를 유지하면서 보다 구체적이거나 수정된 ​​버전의 메서드를 제공할 수 있습니다.

메서드 재정의는 다음과 같은 상황에서 사용됩니다.

  • 파생 클래스가 기본 클래스에서 상속된 메서드의 사용자 정의 구현을 제공하기를 원합니다.
  • 기본 클래스 메서드는 가상으로 표시됩니다.
  • 파생 클래스의 메서드 선언에 override 키워드를 사용하세요.

메소드 숨기기

메서드 숨기기에는 기본 클래스 메서드와 동일한 이름과 매개변수를 사용하여 새 메서드(new)를 만드는 작업이 포함됩니다. 메서드 재정의와 달리 메서드 숨기기는 파생 클래스에 완전히 새로운 메서드를 생성하고 기본 클래스 메서드를 수정하지 않습니다.

메소드 숨기기는 다음과 같은 상황에서 사용됩니다.

  • 기본 클래스 메서드와 이름이 같은 파생 클래스에 다른 메서드를 도입하려고 합니다.
  • 기본 클래스의 메서드는 가상으로 선언되지 않습니다.
  • 파생 클래스의 메서드 선언에 new 키워드를 사용하세요.

실습

메서드 재정의:

  • 사용자 정의 상속 메서드
  • 다형성 동작 제공

메서드 숨기기:

  • 향후 호환성(향후 새로운 방법이 추가될 때 문제 방지)
  • 반환 유형의 공분산(기본 클래스 메서드에서 파생 클래스 인스턴스 반환)

다음 예에서는 메소드 재정의 및 메소드 숨기기를 보여줍니다.

<code class="language-csharp">class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Bark");
    }

    public new void Run()   // 方法隐藏
    {
        Console.WriteLine("Dog running");
    }
}</code>

이 예에서는 MakeSound 클래스에서 Dog 메서드를 재정의하여 구체적인 구현을 제공합니다. Run 메서드는 숨겨지고 Dog 클래스에 새 메서드가 생성됩니다.

위 내용은 C#의 재정의와 숨기기: 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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