首頁 >後端開發 >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>

因此,提供的程式碼範例將無法編譯,因為 select 表達式中的匿名類型無法轉換為 DummyInterface 類型。

使用匿名類型的另一種實作介面的方法是使用動態類型,如文章「動態介麵包裝」所述。這涉及創建實現所需介面的動態對象,並將匿名類型包裝在其中。但是,這種方法有其局限性,因為動態類型可能會引入效能開銷,並且更難調試。

以上是匿名類型可以在 C# 中實作介面嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn