Can*_*ğlu 5 c# asp.net inheritance extension-methods
我正在尝试扩展Page类以在ASP.NET中添加一些新功能(一些方法的易用性,因为它们将在该页面的代码中直接调用),并且我得到一个奇怪的错误:
调用我的方法SetQuery,
如果我输入SetQueryPage类,则无法识别(是的,我已添加using [Namespace];),
如果我base.SetQuery在IntelliSense中看到它,但是没有编译说没有实际找到方法或扩展方法页面,
如果我键入(this as Page).SetQuery它是被识别和工作.
特别是第二种情况对我来说似乎是一个错误,因为IntelliSense将其识别为扩展方法,但没有编译.
是否有任何"更自然"的方式来输入SetQuery,没有强制转换等?
扩展方法总是需要(显式)目标对象,因此不可能通过just调用扩展方法TheMethodName().我怀疑如果你输入:
this.SetQuery();
Run Code Online (Sandbox Code Playgroud)
它会工作.有从来没有一个隐含的this.与扩展方法.奇怪但真实.
以上解释了为什么SetQuery()不起作用; base.SetQuery()因为扩展方法是Page为基类定义的,所以不起作用.(this as Page).SetQuery()将同样的原因为工作this.SetQuery(),而实际上因为this as Page显然是真的,编译器将可以把它看成一个无操作-即this.SetQuery()和(this as Page).SetQuery()应产生相同的IL(只要实际的页面没有更具体的SetQuery()方法,显然).
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |