Search code examples
c#anonymous-class

Is it possible to make an anonymous class inherit another class?


This is a long shot, but I have a funny coding situation where I want the ability to create anonymous classes on the fly, yet be able to pass them as a parameter to a method that is expecting an interface or subclass. In other words, I'd like to be able to do something like this:

public class MyBase { ... }

public void Foo(MyBase something)
{
  ...
}

...
var q = db.SomeTable.Select(t =>
        new : MyBase // yeah, I know I can't do this...
        {
          t.Field1,
          t.Field2,
        });
foreach (var item in q)
  Foo(item);

Is there any way to do this other than using a named class?


Solution

  • No. Anonymous types always implicitly derive from object, and never implement any interfaces.

    From section 7.6.10.6 of the C# 5 specificiation:

    An anonymous object initializer declares an anonymous type and returns an instance of that type. An anonymous type is a nameless class type that inherits directly from object.

    So if you want a different base class or you want to implement an interface, you need a named type.