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

Shaul Behr picture Shaul Behr · Mar 6, 2014 · Viewed 12.1k times · Source

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?

Answer

Jon Skeet picture Jon Skeet · Mar 6, 2014

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.