C#의 가상 및 추상 정적 메서드
공급자와 작업할 때 추상 클래스가 추상 정적 메서드를 가질 수 있는지에 대한 질문이 발생합니다. 이 개념을 이해하려면 명확한 설명이 필요합니다.
정적 메서드가 인스턴스화되지 않는 이유
정적 메서드는 직접 인스턴스화되지 않습니다. 객체 참조 없이도 액세스할 수 있습니다. 객체 인스턴스가 아닌 클래스 이름을 통해 호출됩니다.
비가상 정적 호출 의미
중간 언어(IL) 코드에서는 정적 메서드 호출이 이루어집니다. 참조 객체의 클래스 이름이 아닌 메서드를 정의한 클래스 이름을 사용합니다. 예를 들면 다음과 같습니다.
public class A { public static void Test() { } } public class B : A { } class Program { static void Main(string[] args) { B.Test(); } }
Main 메서드의 IL 코드는 다음과 같습니다.
.entrypoint .maxstack 8 L0000: nop L0001: call void ConsoleApplication1.A::Test() L0006: nop L0007: ret
B.Test가 아닌 A.Test를 호출하는 경우에도 호출이 이루어집니다. 테스트는 C# 코드에서 호출됩니다.
정적의 가상성 제한 메소드
추상 메소드를 포함한 가상 메소드는 런타임 시 다양한 객체 유형을 참조할 수 있는 변수를 처리할 때 유용합니다. 정적 메서드의 경우 대상 메서드는 클래스 이름을 통해 액세스되므로 컴파일 타임에 알려집니다. 이렇게 하면 가상화가 필요하지 않습니다.
따라서 C#에서는 가상/추상 정적 메서드가 지원되지 않습니다. 이는 정적 메서드 호출이 비가상적이고 대상 메서드가 컴파일 타임에 결정되어 가상화가 불필요하기 때문입니다.
위 내용은 C#에서 추상 클래스가 정적 메서드를 가질 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!