C# 什么';在类中调用属性的正确方法是什么?

C# 什么';在类中调用属性的正确方法是什么?,c#,properties,C#,Properties,对于某些人来说,这个问题可能看起来很傻,但我想了解其背后的概念,我在TestClass中有一个属性(即TestNumber) public class TestClass { private uint testNumber=0; public uint TestNumber { get { return testNumber; } set { testNumber = value; } } public TestCla

对于某些人来说,这个问题可能看起来很傻,但我想了解其背后的概念,我在
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;
    }
}
现在,如果我想
设置
获取
类外属性的值,我可以简单地执行以下操作

TestClass tc = new TestClass ();
tc.TestNumber = 10;
但是我的问题是如果我想在同一个类中访问这个属性,我有两个选择 我可以用

testNumber=0

TestNumber=0,那么哪一个是正确的&为什么


谢谢

取决于你想做什么

  • 是否要直接设置变量
  • 是否要调用setter逻辑
当前setter没有做任何特殊的事情:

set { testNumber = value; }
但总有一天会的。如果类中有大量的逻辑,那么可能需要更新该逻辑,以便在该时间到来时使用setter而不是变量。然而,相反,类内部的一些逻辑可能显式地不希望使用setter的逻辑,并且可能希望继续直接设置变量

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

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

private uint _testNumber = 0;

按照团队的惯例,我们将其视为一个指标,表明这个变量不是直接设置的,因此任何需要直接设置它的东西都是显式的,很明显,即使只是随便看一眼代码。(它也有助于intellisense,因为如果您试图设置“测试编号”,那么当您键入intellisense名称时,将默认为属性,而不是变量。)

取决于您想要执行的操作

  • 是否要直接设置变量
  • 是否要调用setter逻辑
当前setter没有做任何特殊的事情:

set { testNumber = value; }
但总有一天会的。如果类中有大量的逻辑,那么可能需要更新该逻辑,以便在该时间到来时使用setter而不是变量。然而,相反,类内部的一些逻辑可能显式地不希望使用setter的逻辑,并且可能希望继续直接设置变量

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

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

private uint _testNumber = 0;

按照团队的惯例,我们将其视为一个指标,表明这个变量不是直接设置的,因此任何需要直接设置它的东西都是显式的,很明显,即使只是随便看一眼代码。(这对intellisense也有帮助,因为如果您试图设置“测试编号”,那么当您键入命名intellisense的属性时,将默认为属性,而不是变量。)

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

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

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


这可能会有帮助

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


这可能会有帮助

两者都是合法的。但若您使用属性,那个么setter代码将被执行。这个问题(或类似的问题)已经被解决了。两者都是合法的。但若您使用属性,那个么setter代码将被执行。这个问题(或类似问题)已经解决了。