当我像上面的方法一样编写代码时,我的字段得到了正确的初始化 申请工作正常。
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
代表任何可能抛出的东西
该物业,我给它一个实际价值。
答案 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; }
}
这是一种更新,更方便的语法,可以做同样的事情。