相关疑难解决方法(0)

为什么C#接口方法没有声明为抽象或虚拟?

接口中的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# methods virtual-functions interface abstract

106
推荐指数
3
解决办法
7万
查看次数

为什么Dispose()是非虚拟的?

我是C#的新手,如果这是一个明显的问题,请道歉.

MSDN Dispose示例中,它们定义的Dispose方法是非虚拟的.这是为什么?这对我来说似乎很奇怪 - 我希望IDisposable的子类具有自己的非托管资源,它只会覆盖Dispose并在自己的方法底部调用base.Dispose().

谢谢!

.net c# dispose idisposable

31
推荐指数
3
解决办法
5088
查看次数

如何确定什么是.Net目标

我们现在使用VS2003(目标为.Net 1.1),我们想要升级到VS2008,但我想知道新的.Net目标应该是什么?

  1. 我应该将目标保留为.Net 1.1(非常旧,未安装在所有计算机上)或升级吗?

  2. 如果我升级 - 是2.0恩斯?或者升级到最新的3.5(我们的客户使用Windows XP,Vista和Windows 7)

  3. 如果我将我的应用程序定位到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

.net visual-studio-2008 visual-studio

3
推荐指数
1
解决办法
295
查看次数