Rumah >pembangunan bahagian belakang >C++ >Bolehkah Jenis Tanpa Nama Melaksanakan Antara Muka dalam C#?
Perbincangan tentang pelaksanaan antara muka oleh kelas tanpa nama
Contoh kod berikut nampaknya membayangkan bahawa jenis tanpa nama boleh melaksanakan antara muka:
<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>
Walau bagaimanapun, perlu diambil perhatian bahawa jenis tanpa nama tidak boleh melaksanakan antara muka. Panduan Pengaturcaraan C# dengan jelas menyatakan:
<code>匿名类型是包含一个或多个公共只读属性的类类型。不允许使用其他类型的类成员,例如方法或事件。匿名类型不能转换为除 object 之外的任何接口或类型。</code>
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!