C#에서 COM 유형 감지
C# 컴파일러가 COM 유형을 처리하는 방식은 매우 독특합니다. 주목할만한 예는 다음 예와 같이 인터페이스를 인스턴스화하는 기능입니다.
<code class="language-csharp">Word.Application app = new Word.Application();</code>
애플리케이션은 인터페이스이지만 인스턴스화할 수 있습니다. 이는 Type.GetTypeFromCLSID() 및 Activator.CreateInstance에 대한 호출을 변환하여 수행됩니다.
C# 4의 또 다른 고유한 동작은 참조가 아닌 매개변수를 참조 매개변수에 전달하는 기능입니다. 컴파일러는 실제 값에 영향을 주지 않고 참조로 매개변수를 전달하기 위해 지역 변수를 자동으로 추가합니다.
컴파일러가 이러한 변환을 수행하는 방법을 이해하기 위해 사용자 정의 예를 만들 수 있습니다.
<code class="language-csharp">[ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")] public interface Dummy { void Foo(ref int x); } class Test { static void Main() { Dummy dummy = null; dummy.Foo(10); } }</code>
이 코드는 성공적으로 실행되며 ref 매개변수를 값으로 전달하는 방법을 보여줍니다.
그러나 인터페이스를 인스턴스화하려고 한다고 가정해 보겠습니다.
<code class="language-csharp">Dummy dummy = new Dummy();</code>
이 코드는 성공적으로 실행되지 않지만 컴파일러의 "마법"을 조사해야 할 필요성을 강조합니다. 실제로 인터페이스를 인스턴스화하려면 CoClass 속성을 사용할 수 있습니다.
<code class="language-csharp">[System.Runtime.InteropServices.CoClass(typeof(Test))] public interface Dummy { }</code>
CoClass 속성은 구현 클래스를 인터페이스와 연결하여 구체적인 객체로 인스턴스화할 수 있도록 합니다. 이 접근 방식은 일반적으로 COM API에서 인터페이스 인스턴스화를 요구할 때 사용됩니다.
위 내용은 C# 컴파일러는 COM 유형 인스턴스화 및 참조 매개변수 전달을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!