相关疑难解决方法(0)

VB.NET'With'声明 - 拥抱还是避免?

在工作中,我经常在一些项目中工作,这些项​​目必须在建造期间或生命早期设置某些物体的许多属性.为了方便和可读性,我经常使用该With语句来设置这些属性.我发现

With Me.Elements
    .PropertyA = True
    .PropertyB = "Inactive"
    ' And so on for several more lines
End With
Run Code Online (Sandbox Code Playgroud)

看起来好多了

Me.Elements.PropertyA = True
Me.Elements.PropertyB = "Inactive"
' And so on for several more lines
Run Code Online (Sandbox Code Playgroud)

对于只设置属性的很长的语句.

我注意到With在调试时使用时存在一些问题; 但是,我想知道是否有任何令人信服的理由避免With在实践中使用?我总是假设通过编译器为上述两种情况生成的代码基本相同,这就是为什么我总是选择写出我觉得更具可读性的原因.

vb.net with-statement

70
推荐指数
6
解决办法
6万
查看次数

VB.Net调用New而不赋值

C#我可以这样做:

new SomeObjectType("abc", 10);
Run Code Online (Sandbox Code Playgroud)

换句话说,我可以调用 new 而无需将创建的实例分配给任何变量。然而,VB.Net我似乎不能做同样的事情。

New SomeObjectType("abc", 10) ' syntax error
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点VB.Net

vb.net constructor .net-2.0

5
推荐指数
1
解决办法
1507
查看次数

是'With ... End With'真的更有效率吗?

所以我正在玩ILDASM,并注意到一个奇怪的是我在Google上找不到一个非常好的解释.

似乎在VB.NET中使用With块时,得到的MSIL大于w/o.所以这让我想问,With Blocks真的更有效吗?MSIL是JIT到本机机器代码的东西,所以较小的代码大小应该意味着更高效的代码,对吧?

这是两个类(Class2和Class3)的示例,它们为Class1的实例设置相同的值.Class2没有With块,而Class3使用With.Class1有六个属性,涉及6个私有成员.每个成员都是特定的数据类型,它都是此测试用例的一部分.

Friend Class Class2
    Friend Sub New()
        Dim c1 As New Class1

        c1.One = "foobar"
        c1.Two = 23009
        c1.Three = 3987231665
        c1.Four = 2874090071765301873
        c1.Five = 3.1415973801462975
        c1.Six = "a"c
    End Sub
End Class

Friend Class Class3
    Friend Sub New()
        Dim c1 As New Class1

        With c1
            .One = "foobar"
            .Two = 23009
            .Three = 3987231665
            .Four = 2874090071765301873
            .Five = 3.1415973801462975
            .Six = "a"c
        End With
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

这是Class2的结果MSIL:

.method assembly specialname rtspecialname 
        instance …
Run Code Online (Sandbox Code Playgroud)

vb.net cil

4
推荐指数
1
解决办法
410
查看次数

标签 统计

vb.net ×3

.net-2.0 ×1

cil ×1

constructor ×1

with-statement ×1