ホームページ >バックエンド開発 >C++ >匿名型は C# でインターフェイスを実装できますか?

匿名型は C# でインターフェイスを実装できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 17:56:43157ブラウズ

Can Anonymous Types Implement Interfaces in C#?

匿名クラスによるインターフェースの実装に関するディスカッション

次のコード例は、匿名型がインターフェイスを実装できることを暗示しているようです:

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。