2010-09-21 133 views
3

显然,扩展方法不适用于子类,还是仅仅是我?扩展方法不适用于子类?

private class Parent 
{   
} 

private class Child 
{ 
} 

public static class Extensions 
{ 
    public static void Method(this Parent parent) 
    { 
    } 
} 

//Test code 
var p = new Parent(); 
p.Method();   // <--- compiler like 
var c = new Child(); 
c.Method();   // <--- compiler no like 

UPDATE

有一个在这个问题(我要离开,以便其他有意义)一个错字 - 我忘了让Child继承Parent

碰巧,我真正的问题是我没有合适的using声明。

(不幸的是,我无法删除,因为在回答太多的upvotes。)

+0

我猜测孩子应该继承父母吗? (好吧,晚了几秒钟:o)) – hhravn 2010-09-21 10:01:55

回答

7

这应该只是罚款(LINQ扩展都是建立在IEnumerable<T>顶部,他们在List<T>等工作。 )。问题是你的例子中Child没有从Parent继承。

+0

是的。 Benjoi,我们可以假设一个错字还是这个答案? – 2010-09-21 10:00:21

+0

事实上,添加'Child:Parent'使其全部工作 – 2010-09-21 10:00:45

+0

OK,我的错误:(确实是Typo。事情是,这是演示代码,为了问题的缘故,尝试重现问题,但在真实代码中,它并没有't work。*回到煤矿... *(我应该删除这个问题吗?) – Benjol 2010-09-21 10:04:52