Discussion sur l'implémentation d'interfaces par classes anonymes
L'exemple de code suivant semble impliquer que les types anonymes peuvent implémenter des interfaces :
<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>
Cependant, il convient de noter que les types anonymes ne peuvent pas implémenter des interfaces. Le guide de programmation C# indique clairement :
<code>匿名类型是包含一个或多个公共只读属性的类类型。不允许使用其他类型的类成员,例如方法或事件。匿名类型不能转换为除 object 之外的任何接口或类型。</code>
Par conséquent, l'exemple de code fourni ne sera pas compilé car le type anonyme dans l'expression de sélection ne peut pas être converti en type DummyInterface
.
Une autre façon d'implémenter une interface utilisant des types anonymes consiste à utiliser des types dynamiques, comme décrit dans l'article « Dynamic Interface Wrapping ». Cela implique de créer un objet dynamique qui implémente l'interface requise et d'y envelopper le type anonyme. Cependant, cette approche présente des limites car le typage dynamique peut introduire une surcharge de performances et est plus difficile à déboguer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!