匿名类实现接口的探讨
以下代码示例似乎暗示了匿名类型可以实现接口:
<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中文网其他相关文章!