C# 可以让匿名类继承另一个类吗?
这是一个很长的目标,但我有一个有趣的编码情况,我希望能够动态创建匿名类,同时能够将它们作为参数传递给需要接口或子类的方法。换言之,我希望能够做到以下几点:C# 可以让匿名类继承另一个类吗?,c#,anonymous-class,C#,Anonymous Class,这是一个很长的目标,但我有一个有趣的编码情况,我希望能够动态创建匿名类,同时能够将它们作为参数传递给需要接口或子类的方法。换言之,我希望能够做到以下几点: public class MyBase { ... } public void Foo(MyBase something) { ... } ... var q = db.SomeTable.Select(t => new : MyBase // yeah, I know I can't do 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);
除了使用命名类之外,还有其他方法可以做到这一点吗?否。匿名类型总是隐式派生自
对象,并且从不实现任何接口
根据C#5规范第7.6.10.6节:
匿名对象初始值设定项声明匿名类型并返回该类型的实例。匿名类型是直接从对象继承的无名类类型
因此,如果您想要一个不同的基类或想要实现一个接口,您需要一个命名类型。否。来自:
匿名类型是直接从对象派生的类类型,不能转换为除对象之外的任何类型
要解决您的问题,只需将匿名类型替换为普通类…无法扩展匿名,但如果确实需要,您可以声明您的方法以接受动态参数。简短回答:否
长答覆:
您可以使用C#代理类。有几种工具可以代理类。例如最低起订量 您可以使用dynamic
作为参数类型,而不是MyBase
,但我强烈建议,对于那些甚至有可能从多个位置被调用的对象,不要这样做。奇怪的是,我之前考虑过这一点,除了接口。甚至在这个问题被问到的时候……:)