如何使用{get;访问私有变量 组; }

Kro*_*war 12 .net c# asp.net asp.net-mvc getter

我想为我的网站创建一个包含很多私有变量的类.

我认为有一个解决方案是不要为每个变量编写所有的getter和setter,比如

private int confirmed { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?那么,如何从课外访问这个值呢?

我试过.confirmed,我得到错误说它是私人的(我明白)

但更令人惊讶,.getConfirmed()或者getconfirmed()也不起作用.

我认为这{ get; set; }会产生隐含的那些方法.

有人可以为我澄清这个问题吗?

Cod*_*gue 19

您可以将您的财产声明为公开,然后将getter或setter单独标记为私有:

public int confirmed { get; private set; }
Run Code Online (Sandbox Code Playgroud)

这样,您可以confirmed在定义的类之外访问:

Console.WriteLine(myClass.confirmed); // This is OK
myClass.confirmed = "Nothing"; // Can't do this
Run Code Online (Sandbox Code Playgroud)

并且唯一可以设置值的confirmed是MyClass:

public class MyClass {
    public int confirmed { get; private set; }

    public MyClass() {
        this.confirmed = "This"; // This is fine as we have private access
    }
}
Run Code Online (Sandbox Code Playgroud)


rae*_*ae1 5

您需要了解这一点,

private int confirmed { get; set; }
Run Code Online (Sandbox Code Playgroud)

将扩展为private具有private支持字段的一组方法,

private int _confirmed;

private int confirmed_get() 
{ 
    return this._confirmed; 
}

private void confirmed_set(int value) 
{ 
    this._confirmed = value; 
}
Run Code Online (Sandbox Code Playgroud)

因此,标记属性private会使访问器和更改器也变为私有,这就是为什么您不能在类外部访问它们。同样,这些方法在编译时不可访问,因此instance.confirmed_get()不允许进行调用,只能instance.confimed读取和写入该属性。

您可能想要声明它public

public int confirmed { get; set; }
Run Code Online (Sandbox Code Playgroud)

行为相似(该字段仍为private),但两种方法都相同public。正如其他人提到的那样,您可以分别修改行为的“ getsetreadonly或“ writeonly类型”,

public int confirmed { get; private/protected set; }
Run Code Online (Sandbox Code Playgroud)

要么

public int confirmed { private/protected get; set; }
Run Code Online (Sandbox Code Playgroud)

最后一件事,您应该养成习惯将驼峰箱用于属性,例如Confirmed,将低驼峰箱用于田地(例如confirmed,有些人甚至可以这样做_confirmed)。区分这两种类型是一种流行的命名约定,特别是对于该类的消费者而言。