在C#中获取变量的正确语法

时间:2017-03-01 08:27:09

标签: c#

如果您只在对象的初始化时设置变量,但希望其他对象能够读取变量而不是在初始化后设置它,那么C#中的正确语法是什么?

根据我的理解,它看起来像这样:

class Test
{
 private string name;
 public string Name { get { return name; } }

 public Test() {
  this.name = "Hello World!";
 }

}

这是正确的方法吗?

5 个答案:

答案 0 :(得分:2)

这是正确的方法,但是,您可能需要考虑使用readonly关键字,因为这样可以防止在构造函数之外修改name变量。

像这样:

class Test
{
 private readonly string name;
 public string Name { get { return name; } }

 public Test()
 {
  name = "Hello World!";
 }

 public Test(string name)
 {
  this.name = name; //You use this to set scope to the object to disambiguate name
 }

}

更简单的实现是使用readonly automatic property,但这并不妨碍构造函数之外的修改:

class Test
{
  public string Name {get; private set;}

  public Test()
  {
     Name = "Hello World!";
  }

  public Test(string name)
  {
     Name = name;
  }

}

如果你正在使用C#6:

class Test
{
  public string Name {get;} = "Hello World!";

  public Test()
  {
  }

  public Test(string name)
  {
     Name = name;
  }

}

答案 1 :(得分:1)

您的实施看起来是正确的,但可以表达得更简单

public string Name {get;} = "Hello World!";

答案 2 :(得分:0)

在现代C#中你可以这样做:

class Test
{
    public string Name { get; }
    public Test(string name) 
    {
         Name = name;
    }
}

你的getter正在返回私有字段,但我的版本正在使用.NET的自动备份功能。同样在我的版本中,后备字段是只读的,因此即使在类中也不能更改它。如果您确实需要,可以使用:

class Test
{
    public string Name { get; private set; }
    //...
}

还有其他方法可以使用最新版本的C#进行设置,但我更倾向于在构造函数中明确说明。

答案 3 :(得分:-1)

您可以使用readonly关键字 - 它只允许在类初始化期间设置值:

class Test
{
     private readonly string name;
     public string Name { get { return name; } }

     public Test
     {
         this.name = "Hello World!";
     }
}

即使同一类的方法也不能改变name的值。

使用C#6,你甚至可以省略变量名和readonly关键字:

class Test
{ 
    public string Name { get; }

    public Test()
    {
        this.Name = "my readonly value";
    }
}

答案 4 :(得分:-1)

您可以执行以下操作:

class Test
{
    public readonly string Name = "Hello World!";

    public Test()
    {
    }
}

class Test
{
    public readonly string Name;

    public Test(string name)
    {
        this.Name = "Hello World!";
    }
}