2009-06-01 110 views
3

我想问问那些关于代码优化的vb.net专家。我的例子是VB.Net代码优化?

a。

Dim lblEventCategory = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

b。

Dim lblEventCategory As Label = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

哪两个更有效率是字母A?或字母B?

有人能帮我理解这些代码吗?

预先感谢

回答

0

第一个定义变量lblEventCategory作为Variant类型。这通常比使用显式类型的第二个更糟糕。 Variant类型是一种“全部捕获”,可以安全地保存任何类型的变量,但是会丢失编译器可能已经提供给您的所有类型安全和警告。同样,Variant类型使用更多内存,并且在运行时会更慢,因为需要对其执行转换。

此外,方法调用将是“后期限制” - 这意味着对这些方法的调用在运行时才会被解析,当变量的类型已知时,调用将通过名称进行。与使用显式类型的情况相比,这通常是天文学上较慢的,其中调用可以“早期绑定”(即在编译时)。

另一方面,Variant类型确实有它们的位置。如果您正在使用仅支持变体类型的VBScript语言进行交互,它们在OLE自动化(COM)编程中很有用。在这种情况下,将呼叫包装到延迟绑定代码中可能会比较明智,以便将Variant类型转换为呼叫边界处的正确类型并将其转换为正确类型。

+0

不正确。在vb2008之前,第一个被定义为对象类型,而不是变体。在vb2008中(假设Option Infer On)被定义为一个标签。 – ggf31416 2009-06-01 10:56:08

+0

在VB.NET中不存在变体类型。 – 2009-06-01 13:50:27

4

如果我们正在谈论的.net 3.5比1800年信息说不是真的,因为类型推断将发生,编译器将推断类型,因此是类型安全。 所以.net 3.5 a和b是一样的。

在Visual Studio 2008中,只需转动Option Infer On或Off即可查看区别。

在.NET 3.5之前,不会发生类型推断,它将使用变体类型或者使用对象类型。 所以在pre.Net 3.5中A和B是不一样的。

+2

vb2008类型推断是一种语言功能,与框架的版本无关。如果.net 2.0被定位,类型推断不会改变。 – ggf31416 2009-06-01 11:03:08

2

在.NET 3.5中Dim x = value与C#var x = value相同;编译器会推断出类型,因此在运行时两者相等。