阻止访问私有成员变量?强制使用公共财产?

ada*_*iko 12 c# oop

我使用的是.NET 2.0,因此无法访问自动属性.所以我必须采用以下编码私有变量和公共属性的方式

private string m_hello = null;

public string Hello
{
     get{return m_hello;}
     set{m_hello = value;}
}
Run Code Online (Sandbox Code Playgroud)

对于上述私有/公共成员的包含类的方法,是否仍然限制对私有变量的访问?我不喜欢我可以使用m_hello或Hello.

谢谢.

Jon*_*eet 10

正如其他人所说,这应该是一个答案......

在针对.NET 2.0时,您仍然可以在C#3中使用自动属性,以及其他一些C#3功能.与(例如)表达式树不同,自动属性不需要CLR或框架中的任何特殊内容,超出[CompilerGenerated]属性(在.NET 2.0中引入).

因此,如果您使用的是VS2008或VS2010,那么使用自动属性是值得的.

虽然它值得,但我也喜欢这种能力.我希望能够在属性中定义变量:

 public string Name
 {
     private string name;
     get { return name; }
     set { name = value; }
 }
Run Code Online (Sandbox Code Playgroud)

我认为这有点像只读私有变量 - 它对客户端没有任何影响,但它有助于在类代码本身内强制执行.

  • +1 - 我完全同意私有范围的属性变量.我非常希望能够在属性方法中使用任意代码**和**限制对属性的支持字段的访问权限,这样我就不会意外地避免getter/setter代码中的"规则". (2认同)

Jes*_*cer 8

您可以通过继承来完成此任务:

abstract class A // A is not instantiatable due to being abstract
{
    private string m_hello = null;

    public string Hello
    {
         get{return m_hello;}
         set{m_hello = value;}
    }
}

class B : A
{
    // B now cannot access the private variable, use B in your code instead of A
}
Run Code Online (Sandbox Code Playgroud)

我并不是说这很好.只是它可以做到.

  • 是的,但是......哎呀. (4认同)

Mit*_*ers 6

没有办法做到这一点,除了简单地遵循你自己的约定并做到这一点.你好,如果你真的需要通过你的公共财产.

我不明白为什么你需要/想要这样做,因为它是你的内部类,你是控制代码的人,你可以定义它的使用方式,所以不应该一个问题.