一尘不染

匿名类可以实现接口吗?

c#

是否可以使用匿名类型实现接口?

我有一段我想工作的代码,但是不知道该怎么做。

我有几个答案,要么说不,要么创建一个实现接口的类,以构造新的实例。这并不是很理想,但是我想知道是否有一种机制可以在接口顶部创建一个精简的动态类,从而简化这一过程。

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);
        }
    }
}

我发现了一篇文章动态接口包装描述了一种方法。这是最好的方法吗?


阅读 359

收藏
2020-05-19

共1个答案

一尘不染

不可以,匿名类型不能实现接口。从C#编程指南中

匿名类型是由一个或多个公共只读属性组成的类类型。不允许使用其他种类的类成员,例如方法或事件。匿名类型不能强制转换为对象以外的任何接口或类型。

2020-05-19