是否有可能使一个匿名类inheritance另一个类?

这是一个很长的一步,但我有一个有趣的编码情况,我希望能够创build匿名类的能力,但能够将它们作为parameter passing给期望接口或子类的方法。 换句话说,我希望能够做到这样的事情:

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

除了使用命名类之外,还有什么办法可以做到吗?

不。匿名types总是隐式地从object派生,并且从不实现任何接口。

从C#5的第7.6.10.6节的具体化:

匿名对象初始值设定项声明一个匿名types并返回该types的一个实例。 匿名types是直接从objectinheritance的无名类types。

所以如果你想要一个不同的基类, 或者你想实现一个接口,你需要一个命名types。

不。从文档 :

匿名types是直接从对象派生的类types,不能转换为除对象之外的任何types。

为了解决你的问题,只需用正常的类replace匿名types…

不能扩展匿名,但是如果你真的需要这个工作,你可以声明你的方法接受一个dynamic参数。