Rumah > pembangunan bahagian belakang > C++ > Bolehkah Jenis Tanpa Nama Melaksanakan Antara Muka dalam C#?

Bolehkah Jenis Tanpa Nama Melaksanakan Antara Muka dalam C#?

Mary-Kate Olsen
Lepaskan: 2025-01-13 17:56:43
asal
219 orang telah melayarinya

Can Anonymous Types Implement Interfaces in C#?

Perbincangan tentang pelaksanaan antara muka oleh kelas tanpa nama

Contoh kod berikut nampaknya membayangkan bahawa jenis tanpa nama boleh melaksanakan antara muka:

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);
        }
    }
}
Salin selepas log masuk

Walau bagaimanapun, perlu diambil perhatian bahawa jenis tanpa nama tidak boleh melaksanakan antara muka. Panduan Pengaturcaraan C# dengan jelas menyatakan:

<code>匿名类型是包含一个或多个公共只读属性的类类型。不允许使用其他类型的类成员,例如方法或事件。匿名类型不能转换为除 object 之外的任何接口或类型。</code>
Salin selepas log masuk

Akibatnya, contoh kod yang disediakan tidak akan disusun kerana jenis tanpa nama dalam ungkapan pilih tidak boleh ditukar kepada jenis DummyInterface.

Cara lain untuk melaksanakan antara muka menggunakan jenis tanpa nama ialah menggunakan jenis dinamik, seperti yang diterangkan dalam artikel "Pembungkusan Antara Muka Dinamik". Ini melibatkan mencipta objek dinamik yang melaksanakan antara muka yang diperlukan dan membungkus jenis tanpa nama di dalamnya. Walau bagaimanapun, pendekatan ini mempunyai had kerana penaipan dinamik boleh memperkenalkan overhed prestasi dan lebih sukar untuk nyahpepijat.

Atas ialah kandungan terperinci Bolehkah Jenis Tanpa Nama Melaksanakan Antara Muka dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan