什么';这是调用类中属性的正确方法

本文关键字:属性 方法 调用 什么 | 更新日期: 2023-09-27 18:25:45

这个问题对一些人来说可能很傻,但我想了解背后的概念,我在TestClass中有一个属性(即TestNumber)。

 public class TestClass
 {
    private uint testNumber=0;
    public uint TestNumber
    {
        get { return testNumber; }
        set { testNumber = value; }
    }
    public TestClass ()
    {
        TestNumber = 0;
        // or
        testNumber = 0;
    }
}

现在,如果我想setget类外属性的值,我可以简单地执行以下操作,

TestClass tc = new TestClass ();
tc.TestNumber = 10;

但我的问题是,如果我想在同一个类中访问此属性,我有两个选项我可以使用

testNumber=0

测试编号=0,那么哪一个是正确的&为什么?

谢谢!

什么';这是调用类中属性的正确方法

取决于你想做什么…

  • 是否要直接设置变量
  • 是否要调用setter逻辑

当前的setter没有做任何特别的事情:

set { testNumber = value; }

但是有一天它可能。如果类中有大量的逻辑,那么在该时间到来时,可能需要更新该逻辑以使用setter而不是变量。相反,类内部逻辑的某些可能明确地想要使用setter的逻辑,并且可能想要继续直接设置变量。

封装很有趣,因为类中的任何东西都可以同时做这两件事,而其中的不同逻辑可能试图实现非常不同的事情。

出于个人喜好,我经常喜欢使用命名约定,暗示变量是我不想直接设置的。我见过的最常见的惯例是用下划线作为前缀:

private uint _testNumber = 0;

根据团队的惯例,我们将其视为一个指标,表明该变量不应直接设置,因此所做的需要直接设置的任何事情都是明确且明显的,即使只是随便看一眼代码。(这也有助于intellisense,因为如果试图设置"测试编号",那么当键入名称时,intellisenses将默认为属性,而不是变量。)

虽然两者都有效,但后者更好,因为您可以使用setters/getters逻辑(如果更多,则只返回/设置后字段的值)。因此,您的成员只有一个单一的访问点,而不是许多可能的访问点。

几乎99%的时间你都想使用这些属性。为什么
它的简单属性允许您在场景后面添加逻辑,同时代码可以像以前一样继续工作
通过使用该属性,您可以省去在更新其他部分时遗漏某些部分的麻烦,并在类中使用字段的任何地方传播逻辑
你有没有想过为什么c中会引入自动属性
其中一个原因是,它允许您使用该属性,根据自己的意愿公开它,并继续对应用程序的其余部分进行编码,然后如果您需要在其中添加一些逻辑,则可以在不破坏现有代码的情况下有效地执行此操作!这感觉就像普通的田野。你只需要先写下属性,然后按照你的意愿去做。

也看看这里,也许会有帮助。