获取和设置属性'初始化

时间:2016-07-02 22:59:14

标签: c#

当我像上面的方法一样编写代码时,我的字段得到了正确的初始化 申请工作正常。

private string username;
    private string password;

    public string Password
    {
        get { return password; }
        set { password = value; }
    }

    public string Username
    {
        get { return username; }
        set { username = value; }
    }

    public Authenticate()
    {
        this.username = "njabulo";
        this.password = "12345";
    }

但是在写这个之前我已经按照以下方式编写代码了 没有工作,字段没有初始化

private string username;
private string password;

public string Password
    {
        get { return password; }
        set { password = "njabulo"; }
    }

    public string Username
    {
        get { return username; }
        set { username = "12345"; }
    }

我想知道究竟是什么让它不能在第二种方法上工作,因为我认为,set属性上的value代表任何可能抛出的东西 该物业,我给它一个实际价值。

4 个答案:

答案 0 :(得分:7)

没有理由Set为字面值,您也可以

get { return "njabulo"; }

如果您使用的是C#6,则可以初始化为:

public string Password {get; set;} = "njabulo";

然后它将初始化,但如果稍后再设置它将不会始终保持该值。

答案 1 :(得分:2)

使用getter或setter定义属性时,意味着getter或setter的代码仅在发生任何这些操作时执行。

在第二个示例中,您尚未调用setter。并且没有理由指定具有内容值的setter。

第一个例子是精美的bcoz你做了以下

1.具有后端字段的定义属性。 2.初始化的后端字段

但是在第二个中你还没有进行初始化。

答案 2 :(得分:0)

正确的初始化是第一种方法,或者使用自动属性使其更短。第二种方法,在任何人调用" set"之前,您的密码或用户名仍为空:

public string Password { get; set; }
public string Username { get; set; }
public Authenticate()
{
    Username = "njabulo";
    Password = "12345";
}

由于上面的评论(比较值),我添加了更多内容,您可以像这样使用它:

public class Authenticate
{
  private string _password;
  private string _username;

  public Authenticate()
  {
    _password = "mypassword";
    _username = "myusername";
  }

  public string Password
  {
    get { return _password; }
    set
    {
      if (_password != value)  // Compare it here
        _password = value;
    }
  }

  public string Username
  {
    get { return _username; }
    set
    {
      if (_username != value)  // Compare it here
        _username = value;
    }
  }
}

答案 3 :(得分:0)

5的目的是允许设置该属性的值,如下所示:

set

您通常会写这样的属性:

var x = new WhateverYourClassIsNamed();
x.Username = "ABC";

如果有人打电话

public string Username
{
    get { return username; }
    set { username = value; }
}

然后在调用x.Username = "newusername"; 方法时,set为“newusername”;这就是你可以在课堂上设置一个属性的方法。您不必声明名为value的变量。这会自动引用您拨打value时使用的任何值。

如果你这样做:

set

然后,您尝试设置的值无关紧要。你可以打电话给

set { username = "12345"; }

或任何其他值,但始终将x.Username = "99999" 设置为“12345”。

通常当我们说“初始化”时,我们指的是在首次创建类时设置的值。如果这是你的想法,你可以这样做:

username

或像Crowcoder建议的那样,

private string username;
private string password = "12345"; //This set whenever you create
                                   //a new instance of the class
public string Password
{
    get { return password; }
    set { password = value; }
}

public string Username
{
    get { return username; }
    set { username = value; }
}

这是一种更新,更方便的语法,可以做同样的事情。