1. ホーム
  2. c#

[解決済み] 匿名クラスはインターフェースを実装できますか?

2022-03-20 18:35:53

質問

匿名型にインターフェースを実装させることは可能ですか?

動作させたいコードがあるのですが、どうすればいいのかわかりません。

いくつかの回答は、ノーと言うか、インターフェースを実装したクラスを作成して、その新しいインスタンスを構築するというものでした。これは本当に理想的ではありませんが、私はこれを簡単にするインターフェイスの上に薄い動的なクラスを作成するメカニズムがあるかどうか疑問に思っています。

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);
        }
    }
}

ある記事を見つけました 動的なインターフェイスのラッピング は、1つのアプローチについて説明しています。これはベストな方法なのでしょうか?

どのように解決するのですか?

いいえ、匿名型はインターフェイスを実装できません。からの C#プログラミングガイド :

匿名型は、1つ以上の公開された読み取り専用のプロパティで構成されるクラス型です。メソッドやイベントなど、他の種類のクラスメンバを使用することはできません。匿名型は、object 以外のインターフェースや型にキャストすることはできません。