我注意到一些开发人员将此语法用于属性:
private int someVar;
public int SomeVar
{
get { return someVar; }
set { someVar= value; }
}
虽然有些开发人员使用它:
public int SomeVar
{
get;
set;
}
我猜两个人的表现都是一样的。为了可读性,可重用性以及您可能知道的其他因素,哪一个更好,并被视为在社区内使用的方式。
答案 0 :(得分:5)
如果您在访问或更改属性时不打算进行任何验证或其他任何操作,请使用auto属性(您的第二个示例)。如果您需要验证您的setter,或在某人获取或设置该值或某种性质时调用方法,请使用您的第一个示例。如果您不需要两者,则auto属性只会阻止您同时拥有属性和支持字段。
答案 1 :(得分:1)
更高版本更具可读性。并避免“someVar”或“SomeVar”的错误
答案 2 :(得分:1)
它归结为它时真的是一样的。对于自动实现的属性,编译器会为您创建字段。如果您不需要字段,因为它是标准的getter或setter,那么大多数人都是自动实现的属性。如果您需要属性中的逻辑而不是需要字段。
答案 3 :(得分:1)
这取决于......
如果你所做的只是设置和回读字段的值,那么第二种方法是首选的,因为它被认为更具可读性。这种机制是在C#3.0中引入的。
如果您的getter需要对值进行一些验证,或者您的setter需要触发PropertyChanged事件以便UI可以更新,那么第一种方法是必需的。
答案 4 :(得分:1)
正如其他人所说,后者称为自动属性,可在编译时自动生成字段。还需要注意的一点是,与你所拥有的完全相同的是
public int SomeVar
{
get;
private set;
}
答案 5 :(得分:0)
方法1
private int someVar;
public int SomeVar
{
get { return someVar; }
set { someVar= value; }
}
这种方法通常不是首选方法,因为某些语言(如VB.NET)不区分大小写。因此,someVar
,SomeVar
,SOMEVAR
和somevar
以及大写和小写的所有可能组合,您可以认为对编译器来说意味着相同,这可能是产生错误。
方法2
public int SomeVar{get; set;}
此方法称为自动属性实现,它在阴影中创建一个私有变量,用于存储和检索传递给属性的数据。
在VB.NET中,为每个自动实现的属性创建的变量的名称与前缀为下划线(_)的属性相同。因此,名为SomeProperty
的属性将具有名为_SomeProperty
的对应私有变量。
这可以在您的VB.NET代码中通过创建任何自动实现的属性,然后创建一个与前缀为下划线的自动实现属性同名的变量来演示。
但是,在C#中,如果您有自动实现的属性,则会使用CompilerGenerated
属性修饰的变量用于该属性。因此,您可以使用自动实现的属性和与属性同名但在不同大小写中的变量(,如方法1 中所示)。
<强>结论强>
通常优选尽可能使用自动实现的属性。如果需要在将属性分配给它的相应变量之前执行某些验证,建议使用name作为属性值存储的变量,并使用下划线前缀,如下所示。
private int _SomeVar;
public int SomeVar
{
get { return _SomeVar;}
set { _SomeVar = value > 0 ? value : 0; }
}
答案 6 :(得分:-1)
定义属性的基本和最佳方法是这样的
private int _student_rollnumber;
private string _student_name;
public int Student_RollNumber
{
get { return _student_rollnumber; }
set { _student_rollnumber = value; }
}
public string Student_Name
{
get { return _student_name; }
set { _student_name = value; }
}