我不明白静态属性之间的区别:
public static int intId;
并得到;设定;属性:
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
这两者有什么区别?他们的工作方式相同或不同?
答案 0 :(得分:5)
您的第一个样本是字段,而不是属性。
总是将字段设为私有,并将其包装在属性中是一种很好的做法。
通过这种方式,您可以在后代中添加set或override属性的验证(如果它被标记为虚拟)。此外,您可以在get和set中添加一些棘手的代码,这些代码将隐藏在使用您的类的人身上。
答案 1 :(得分:1)
第一个不是财产。这是一个领域。它也是 static 。
即使它不是静态的,也是一个实例变量,两者是不同的,并编译为不同的IL。
关于为什么在公共字段上使用简单属性 - 属性允许您封装后面的实现。它们允许您在不更改界面的情况下更改类型内部。
答案 2 :(得分:0)
第一个是静态场;它甚至不是财产。
静态字段只有一个应用程序值。
虽然第二个是实例属性,但对于每个类的实例都是不同的。
如果它是属性或字段,则在此示例中没有太大区别。但从长远来看,如果你在界面中使用了一个属性,你可能会在以后更改它以获得一个实际的getter和setter,例如,验证或使对象以某种方式对新值做出反应。字段只是一个字段,您无法控制它何时以及如何设置并对其作出反应。
答案 3 :(得分:0)
这两者有什么区别?
您的第一个代码示例是字段,第二个代码是属性。
字段是class
成员,在调用class
之前,class
实例化(如果它在constructor
定义上设置),其值被分配你在设置或获取它时没有任何控制权:
public static int intId;
一个属性是class
成员,我可以把它描述为一个特殊的“字段”,你可以控制它如何设置和获取数据,换句话说 - 封装,它是一种功能,但表现得像一个字段:
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
在您的示例中,int
属性正在使用static
int
字段,但您正在错误地使用这两个字段:
您的字段应使用private
修饰符,而不是static
,否则无法使用它,因为它可能会从外部来源更改。
它们都有相同的名称,请进行更改。
就像那样:
private int _intId;
public int IntId
{
get
{
return _intId;
}
set
{
_intId = value;
}
}
答案 4 :(得分:0)
它们是该类的相同int变量,但是第一个因为它是一个静态int,它可以从Class访问并且可以被更改,并且它的任何实例都具有相同的值。
public static int intId;
第二个实例将只访问实例,并且每个实例都有一个唯一值,因为它不是静态的,但是任何人都可以访问它,因为它是公开的。
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}