关于C#公共变量:C#Public Variables – 常见的编程实践

C# Public Variables - common programming practise

当我6到8年前在大学时,我认识到,在使用Java时,公共获取和设置方法,但私有变量是常见的做法。然而,最近,当我使用c_时,我意识到许多公共类变量都具有公共的可访问性,例如string.length。

公开变量是C语言中的常见做法吗(人们是否普遍接受这样的编程方式)?

谢谢


string.length实际上不是公共变量。在C中,使用getter的方式很常见:

1
2
3
4
5
6
7
8
9
10
11
12
class Foo
{
    private int _bar;
    public int Bar
    {
        get { return _bar; } // getter
        set { _bar = value; } // setter
    }
}
// ...
Foo foo = new Foo();
foo.Bar = 42;

换句话说,string.length只是只读变量string的getter。


通常,将setter标记为private也是一个很好的实践,这意味着只有声明setter的位置才能为属性设置值,并且任何其他派生类都可以使用getter方法访问它。因此,有两种方法可以声明属性:

使用prop快捷方式并点击选项卡两次(Visual Studio中的代码片段)。这产生:

1
public int Foo{ get; set; }

使用两次propg快捷键+选项卡将setter声明为私有。如下所示:

1
public int Foo{ get; private set; }

在使用快捷方式propfull时使用完整的实现,它将为您提供:

1
2
3
4
5
6
7
private int Foo;

public int MyProperty
{
    get { return Foo;}
    set { Foo = value;}
}


也可以将公共变量设置为只读,而不是将其setter设置为私有:

1
2
3
4
5
6
7
8
9
class Foo
{
    public readonly int Bar; // Bar can only be initialized in the constructor

    public Foo()
    {
        this.Bar = 42;
    }
}