簡體   English   中英

是否有可能使匿名類繼承另一個類?

[英]Is it possible to make an anonymous class inherit another 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...
        {
          t.Field1,
          t.Field2,
        });
foreach (var item in q)
  Foo(item);

除了使用命名類之外,還有什么方法可以做到這一點嗎?

不會。匿名類型總是隱式派生自object ,並且永遠不會實現任何接口。

來自C#5規定的第7.6.10.6節:

匿名對象初始值設定項聲明匿名類型並返回該類型的實例。 匿名類型是直接從object繼承的無名類類型。

因此,如果您想要一個不同的基類, 或者您想要實現一個接口,則需要一個命名類型。

不。從文檔中

匿名類型是直接從對象派生的類類型,不能轉換為除object之外的任何類型。

要解決您的問題,只需將匿名類型替換為普通類...

無法擴展匿名但您可以聲明您的方法接受動態參數,如果您真的需要這個工作。

簡答:不

答案很長:您可以使用C#代理類。 有幾種工具可以代理類。 例如Moqs。 https://github.com/moq/moq4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM