我们应该在每次访问属性时声明一​​个局部变量吗?

时间:2011-05-07 20:31:35

标签: .net vb.net function variables

说我有一个自动属性公共属性P作为整数,每次我想在函数中读取这个变量P时,我会声明一个局部变量: dim _p = P 然后阅读 _p 而不是 P

我想知道它有意义吗?它会让事情变得更慢(这当然不是我的意图)

如果我们将问题更改为公共财产P作为对象,答案是否有任何变化?

7 个答案:

答案 0 :(得分:4)

如果在方法中访问Me.P(或_p)几十万次,将属性复制到局部变量会加快速度。但是,对于大多数情况,这不是一个问题,所以你可以做任何一个,它不会产生显着的差异。

我一般都赞成让代码更易于理解,所以我更乐意访问该属性,除非您发现需要额外的性能。 Me.P_p更容易理解。

答案 1 :(得分:3)

就编码风格而言,我非常希望您没有将P分配给_p。在跟踪代码以查看P的使用位置时,我会错过它的_p版本。我认为速度差异并不大。

答案 2 :(得分:3)

这取决于你的getter是否正在执行除返回已经计算的值之外的任何操作。如果你的getter真的只是作为一个公共变量,那么性能下降可以忽略不计。另一方面,如果你的getter正在进行任何计算,那么每次调用属性时它都会变慢,它必须在其中运行代码。

答案 3 :(得分:2)

您似乎正在做的就是混淆代码。只需直接使用该物业。除了让您的代码更容易理解之外没有任何影响。

答案 4 :(得分:2)

由于属性的性质,这是有道理的。属性允许用户返回alter并指定代码以格式化给定属性的返回值。每次使用相同的方法引用它时,您都不希望运行该代码。

这是C#代码。我相信即使不熟悉C#,你也会理解它的作用:

public int MyNumber
{
    get
    {
        return GetValueFromDatabase();
    }
}

public void main()
{
    lblFirst.Text = MyNumber;
    lblSecond.Text = MyNumber;
    lblThird.Text = MyNumber;
}

在这个例子中,数据库被调用了三次,而下面只调用了一次:

public void main()
{
    int _myNumber = MyNumber;
    lblFirst.Text = _myNumber;
    lblSecond.Text = _myNumber;
    lblThird.Text = _myNumber;
}

请记住,仅仅因为您的财产目前没有做任何花哨的计算并不意味着它将来不会。您不希望编写代码,以便稍后返回并修改几个不同的位置只是因为代码的一行更改。

答案 5 :(得分:2)

自动实现的属性与经典属性具有相同的性能,因为编译器生成的内容与为没有自动实现属性的普通类生成的方式相同。

无需担心性能问题。只要您不需要在属性中实现更多逻辑,就可以获得短格式。

答案 6 :(得分:2)

我只是将其作为删除代码重复的一种方法。如果属性被多次使用,那么我使用“引入变量”重构来将属性替换为包含相同值的本地。

否则,我认为没有理由这样做,并且有许多理由不这样做。