익명 클래스에 의한 인터페이스 구현에 대한 논의
다음 코드 예제는 익명 유형이 인터페이스를 구현할 수 있음을 암시하는 것 같습니다.
<code class="language-csharp">public interface DummyInterface { string A { get; } string B { get; } } public class DummySource { public string A { get; set; } public string C { get; set; } public string D { get; set; } } public class Test { public void WillThisWork() { var source = new DummySource[0]; var values = from value in source select new { A = value.A, B = value.C + "_" + value.D }; DoSomethingWithDummyInterface(values); } public void DoSomethingWithDummyInterface(IEnumerable<DummyInterface> values) { foreach (var value in values) { Console.WriteLine("A = '{0}', B = '{1}'", value.A, value.B); } } }</code>
그러나 익명 유형은 인터페이스를 구현할 수 없다는 점에 유의해야 합니다. C# 프로그래밍 가이드에는 다음과 같이 명확하게 명시되어 있습니다.
<code>匿名类型是包含一个或多个公共只读属性的类类型。不允许使用其他类型的类成员,例如方法或事件。匿名类型不能转换为除 object 之外的任何接口或类型。</code>
결과적으로 select 표현식의 익명 유형을 DummyInterface
유형으로 변환할 수 없기 때문에 제공된 코드 예제는 컴파일되지 않습니다.
익명 유형을 사용하여 인터페이스를 구현하는 또 다른 방법은 "동적 인터페이스 래핑" 문서에 설명된 대로 동적 유형을 사용하는 것입니다. 여기에는 필요한 인터페이스를 구현하는 동적 개체를 만들고 그 안에 익명 형식을 래핑하는 작업이 포함됩니다. 그러나 동적 유형 지정으로 인해 성능 오버헤드가 발생할 수 있고 디버그하기가 더 어렵기 때문에 이 접근 방식에는 한계가 있습니다.
위 내용은 익명 형식이 C#에서 인터페이스를 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!