什么';这是调用类中属性的正确方法
本文关键字:属性 方法 调用 什么 | 更新日期: 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;
}
}
现在,如果我想set
或get
类外属性的值,我可以简单地执行以下操作,
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中会引入自动属性
其中一个原因是,它允许您使用该属性,根据自己的意愿公开它,并继续对应用程序的其余部分进行编码,然后如果您需要在其中添加一些逻辑,则可以在不破坏现有代码的情况下有效地执行此操作!这感觉就像普通的田野。你只需要先写下属性,然后按照你的意愿去做。
也看看这里,也许会有帮助。