首页 >后端开发 >C++ >匿名类型可以在 C# 中实现接口吗?

匿名类型可以在 C# 中实现接口吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-13 17:56:43154浏览

Can Anonymous Types Implement Interfaces in C#?

匿名类实现接口的探讨

以下代码示例似乎暗示了匿名类型可以实现接口:

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn