>백엔드 개발 >C++ >C#에서 정적 메서드를 재정의할 수 없는 이유는 무엇입니까?

C#에서 정적 메서드를 재정의할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 10:12:39180검색

Why Can't Static Methods Be Overridden in C#?

C#에서 정적 메서드를 재정의할 수 없는 이유

C#에서는 추상 클래스에서 추상 정적 메서드를 선언하는 것이 불가능합니다. 이러한 제한은 정적 메서드의 기본 특성에서 비롯됩니다.

정적 메서드는 클래스 인스턴스 없이 클래스 이름을 직접 사용하여 호출됩니다. 정적 메서드가 호출되면 컴파일러는 호출 개체의 실제 유형에 관계없이 이를 선언한 클래스의 정의에 대한 호출을 확인합니다.

예를 들어 다음 코드를 고려하세요.

public abstract class A
{
    public static void Test() {}
}

public class B : A
{
    public static void Test() {} // Compiler error
}

이 시나리오에서 컴파일러는 클래스 B의 Test 메서드가 클래스 A의 추상 Test 메서드를 재정의할 수 없다고 불평합니다. 이는 컴파일러가 메서드가 A 클래스 이름을 사용하여 Test에 대한 호출을 확인하기 때문입니다. B의 인스턴스에서 호출됩니다.

제한 이유

C#에서 정적 메서드를 재정의할 수 없는 이유는 가상 및 추상 메서드가 의미만 있다는 사실에서 발생합니다. 객체에 대해 호출될 때. 정적 메서드는 개체 참조 없이 액세스할 수 있으므로 재정의할 수 없습니다.

반면, 가상 메서드는 다형성을 사용하여 실제 개체 유형을 기반으로 호출할 구현을 결정합니다. 이를 위해서는 다양한 유형의 개체를 보유할 수 있는 변수가 필요하며 이는 정적 메서드에는 적용되지 않습니다.

결론

C#에서는 정적 메서드를 재정의할 수 없습니다. 클래스 이름을 사용하여 직접 호출되고 특정 개체와 연결되지 않기 때문입니다. 재정의를 허용하는 가상 메서드는 런타임에 호출할 올바른 구현을 결정하기 위해 개체 참조가 필요합니다.

위 내용은 C#에서 정적 메서드를 재정의할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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