使用
之间有什么区别public string Username { get; set; }
并使用
public string Username;
我一直在使用第一个,但想要了解两者之间是否存在任何差异,以及一个人应该优先于另一个的情况。
答案 0 :(得分:5)
public string Username { get; set; }
而
public string Username;
更多比较,
其他链接
答案 1 :(得分:3)
使用字段无法处理的属性可以做的一件事是限制setter或getter的可见性:
public string MyProperty { get; private set; }
我经常使用的东西。
你不能用字段做的东西(更强大)是在界面中定义它们。假设您需要一个需要实现类具有特定属性的接口:
public interface MyInterface
{
string MyProperty { get; }
}
请注意,您无需在此处设置setter。完全由实现类来确定它们应该如何设置MyProperty。
答案 2 :(得分:1)
这是一个非常小的例子,你可以使用字符串属性而不是简单地使用字符串。
假设您有一个名为的私有变量:
private string _name;
现在假设您想让该字符串只读?换句话说,您无法更改该值。您可以使用以下内容:
public string Name
{
get { return _name; }
}
它可以允许您控制对该值的访问。或者,您可以拥有它,以便该变量只能执行以下操作:
public string Name
{
set { _name = value; }
}
现在如果你把它放在一起,它将允许你设置值或只是获取值。请参阅以下内容:
public string Name
{
get { return _name; }
set { _name = value; }
}
您可能想知道这是什么意思,因为看起来您可以使用常规字符串执行相同的操作,当然,但这可以控制从外部类直接访问_name变量,而不是从类。
现在如果您想控制该值的设置方式怎么办?如果您想进行一些计算或者您想为该值添加前缀或后缀,该怎么办?您执行以下操作:
public string Name
{
get
{
return _name;
}
set
{
if (value.ToLower() == "bilbo")
_name = "Bilbo Baggins";
}
}
现在,如果将类的Name属性设置为bilbo,则_name的值将设置为Bilbo Baggins,而不是将属性设置为Amy,_name变量将简单地包含,amy。
您可以这样做以保证该属性设置的任何值自动为大写或小写,或者您可以对该值或某种类型的值进行一些验证。
我希望这能解释属性的用途以及如何使它们变得有用而不会太复杂。
答案 3 :(得分:0)
属性为您提供了更大的灵活性,尤其是在.NET中。 C#显示出对属性的偏见,因此请记住这一点。但是,作为一般规则,在获取或设置需要“处理”或伴随操作时使用访问者/变更器。使用字段保存值。如,
public class Name
{
public string First;
public string Last;
public string Full{ get { return this.First + " " + this.Last; } }
}