Heim >Backend-Entwicklung >C++ >Können anonyme Typen Schnittstellen in C# implementieren?
Diskussion zur Implementierung von Schnittstellen durch anonyme Klassen
Das folgende Codebeispiel scheint anzudeuten, dass anonyme Typen Schnittstellen implementieren können:
<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>
Es ist jedoch zu beachten, dass anonyme Typen keine Schnittstellen implementieren können. Im C#-Programmierhandbuch heißt es eindeutig:
<code>匿名类型是包含一个或多个公共只读属性的类类型。不允许使用其他类型的类成员,例如方法或事件。匿名类型不能转换为除 object 之外的任何接口或类型。</code>
Aus diesem Grund lässt sich das bereitgestellte Codebeispiel nicht kompilieren, da der anonyme Typ im Auswahlausdruck nicht in den Typ DummyInterface
konvertiert werden kann.
Eine andere Möglichkeit, eine Schnittstelle mithilfe anonymer Typen zu implementieren, ist die Verwendung dynamischer Typen, wie im Artikel „Dynamic Interface Wrapping“ beschrieben. Dazu gehört die Erstellung eines dynamischen Objekts, das die erforderliche Schnittstelle implementiert und darin den anonymen Typ umschließt. Allerdings weist dieser Ansatz Einschränkungen auf, da die dynamische Typisierung zu Leistungseinbußen führen kann und schwieriger zu debuggen ist.
Das obige ist der detaillierte Inhalt vonKönnen anonyme Typen Schnittstellen in C# implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!