C# 获取并设置属性';初始化

C# 获取并设置属性';初始化,c#,C#,当我像上面的方法那样编写代码时,我的字段得到了正确的初始化 应用程序运行良好 private string username; private string password; public string Password { get { return password; } set { password = value; } } public string Username { get { re

当我像上面的方法那样编写代码时,我的字段得到了正确的初始化 应用程序运行良好

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属性上的
代表可能抛出的任何东西
属性,我给它一个实际值。

没有理由将
设置为文本值,您也可以这样做

get { return "njabulo"; }
如果您使用的是C#6,则可以进行如下初始化:

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

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

没有理由将
设置为文本值,您也可以这样做

get { return "njabulo"; }
如果您使用的是C#6,则可以进行如下初始化:

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

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

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

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

第一个示例是fine bcoz,您已经完成了以下操作

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


但是在第二个示例中,您没有进行初始化。

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

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

第一个示例是fine bcoz,您已经完成了以下操作

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


但是在第二种方法中,您没有进行初始化。

正确的初始化是第一种方法,或者使用automatic属性将其缩短。第二种方法,在任何人调用“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;
    }
  }
}
var x = new WhateverYourClassIsNamed();
x.Username = "ABC";
public string Username
{
    get { return username; }
    set { username = value; }
}

正确的初始化是第一种方法,或者使用automatic属性将其缩短。第二种方法,在任何人调用“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;
    }
  }
}
var x = new WhateverYourClassIsNamed();
x.Username = "ABC";
public string Username
{
    get { return username; }
    set { username = value; }
}

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

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;
    }
  }
}
var x = new WhateverYourClassIsNamed();
x.Username = "ABC";
public string Username
{
    get { return username; }
    set { username = value; }
}
您通常会这样编写属性:

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;
    }
  }
}
var x = new WhateverYourClassIsNamed();
x.Username = "ABC";
public string Username
{
    get { return username; }
    set { username = value; }
}
如果有人打电话来

x.Username = "newusername";
然后当调用
set
方法时,
value
为“newusername”;这就是如何在类上设置属性的方法。您不必声明名为
value
的变量。它自动引用调用
set
时使用的任何值

如果您这样做:

set { username = "12345"; }
那么,您尝试设置什么值并不重要。你可以打电话

x.Username = "99999"
或任何其他值,但它总是将
username
设置为“12345”

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

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; }
}
或者按照Crowcoder的建议去做

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

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

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

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;
    }
  }
}
var x = new WhateverYourClassIsNamed();
x.Username = "ABC";
public string Username
{
    get { return username; }
    set { username = value; }
}
您通常会这样编写属性:

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;
    }
  }
}
var x = new WhateverYourClassIsNamed();
x.Username = "ABC";
public string Username
{
    get { return username; }
    set { username = value; }
}
如果有人打电话来

x.Username = "newusername";
然后当调用
set
方法时,
value
为“newusername”;这就是如何在类上设置属性的方法。您不必声明名为
value
的变量。它自动引用调用
set
时使用的任何值

如果您这样做:

set { username = "12345"; }
那么,您尝试设置什么值并不重要。你可以打电话

x.Username = "99999"
或任何其他值,但它总是将
username
设置为“12345”

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

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; }
}
或者按照Crowcoder的建议去做

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

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

第二种方法:如果有人调用Password=“…something…”,则会调用“set”,现在您的密码是“njabulo”。在此之前,密码是空的。我有一个方法接收两个字符串参数,id和pass…现在我想比较我在方法中传递的变量和我在属性上初始化的变量…它不起作用,它说用户名和密码是空的。使用第一个方法初始化它。第二种方法:如果有人调用Password=“…某物…”,则会调用“set”,此时您的密码为“njabulo”。在此之前,密码是空的。我有一个方法接收两个字符串参数,id和pass…现在我想比较我在方法中传递的变量和我在属性上初始化的变量…它不起作用,它说用户名和密码是空的。使用第一个方法初始化它。你可以在“集合”中比较。谢谢你的回答,伙计们,他们很有效。。我现在明白了,谢谢你的回答,伙计们,他们很有效。。我现在明白了,这正是我想做的,谢谢。这正是我想做的,谢谢