匿名クラスによるインターフェースの実装に関するディスカッション
次のコード例は、匿名型がインターフェイスを実装できることを暗示しているようです:
<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>
その結果、選択式の匿名型を DummyInterface
型に変換できないため、提供されたコード例はコンパイルされません。
匿名型を使用してインターフェイスを実装するもう 1 つの方法は、記事「動的インターフェイスのラッピング」で説明されているように、動的型を使用することです。これには、必要なインターフェイスを実装する動的オブジェクトを作成し、その中に匿名型をラップすることが含まれます。ただし、動的型付けではパフォーマンスのオーバーヘッドが発生する可能性があり、デバッグがより困難になるため、このアプローチには制限があります。
以上が匿名型は C# でインターフェイスを実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。