接口中的C#方法在不使用virtual
关键字的情况下声明,并在派生类中重写而不使用override
关键字.
是否有一个原因?我认为它只是一种语言方便,显然CLR知道如何处理这个问题(默认情况下方法不是虚拟的),但还有其他技术原因吗?
以下是派生类生成的IL:
class Example : IDisposable {
public void Dispose() { }
}
.method public hidebysig newslot virtual final
instance void Dispose() cil managed
{
// Code size 2 (0x2)
.maxstack 8
IL_0000: nop
IL_0001: ret
} // end of method Example::Dispose
Run Code Online (Sandbox Code Playgroud)
请注意,该方法virtual
final
在IL中声明.
我是C#的新手,如果这是一个明显的问题,请道歉.
在MSDN Dispose示例中,它们定义的Dispose方法是非虚拟的.这是为什么?这对我来说似乎很奇怪 - 我希望IDisposable的子类具有自己的非托管资源,它只会覆盖Dispose并在自己的方法底部调用base.Dispose().
谢谢!
我们现在使用VS2003(目标为.Net 1.1),我们想要升级到VS2008,但我想知道新的.Net目标应该是什么?
我应该将目标保留为.Net 1.1(非常旧,未安装在所有计算机上)或升级吗?
如果我升级 - 是2.0恩斯?或者升级到最新的3.5(我们的客户使用Windows XP,Vista和Windows 7)
如果我将我的应用程序定位到2.0,并且用户有3.5,会发生什么?用户应该在.Net 3.5上安装.Net 2.0吗?即使安装旧版本"以上"新版本,它可以并排工作吗?或者应用程序可以正常运行,因为3.5"包括"2.0?
谢谢,
Atara
...
谢谢你们.我想我将定位到2.0,覆盖我的大多数客户,如果客户没有安装任何.Net,我会要求他安装最新版本(3.5及更高版本4)
您能否确认.Net 3.5刚刚添加了更多的程序集到2.0,并且不包含2.0程序集的错误修复程序?
(我的用户的计算机技能水平不高,安装越少越好)
...更新:查看我的问题 - Microsoft .NET兼容性
谢谢你的回答.
Atara