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…现在我想比较我在方法中传递的变量和我在属性上初始化的变量…它不起作用,它说用户名和密码是空的。使用第一个方法初始化它。你可以在“集合”中比较。谢谢你的回答,伙计们,他们很有效。。我现在明白了,谢谢你的回答,伙计们,他们很有效。。我现在明白了,这正是我想做的,谢谢。这正是我想做的,谢谢