匿名類別實作介面的探討
以下程式碼範例似乎暗示了匿名類型可以實現介面:
<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中文網其他相關文章!