Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以让匿名类继承另一个类吗?_C#_Anonymous Class - Fatal编程技术网

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
,但我强烈建议,对于那些甚至有可能从多个位置被调用的对象,不要这样做。奇怪的是,我之前考虑过这一点,除了接口。甚至在这个问题被问到的时候……:)