C# 属性与get之间的差异;设置没有得到;设置
我不理解静态属性之间的区别:C# 属性与get之间的差异;设置没有得到;设置,c#,properties,static,get,set,C#,Properties,Static,Get,Set,我不理解静态属性之间的区别: public static int intId; public int intId { get { return intId; } set { intId = value; } } 得到;设置特性: public static int intId; public int intId { get { return intId; } set { intId = value; } }
public static int intId;
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
得到;设置特性:
public static int intId;
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
这两者有什么区别?它们的工作方式相同或不同?您的第一个示例是字段,而不是属性 始终将字段设置为私有字段,并将其包装到属性中,这是一种很好的做法
这样,您就可以在集合上添加验证,或者在子体中重写属性(如果它被标记为虚拟的话)。您还可以在get和set中添加一些复杂的代码,这些代码将对使用您的类的人隐藏。您的第一个示例是字段,而不是属性 始终将字段设置为私有字段,并将其包装到属性中,这是一种很好的做法
这样,您就可以在集合上添加验证,或者在子体中重写属性(如果它被标记为虚拟的话)。您还可以在get和set中添加一些棘手的代码,这些代码将对使用您的类的人隐藏。第一个不是属性。这是一个领域。它也是静态的 即使它不是静态的,而是一个实例变量,但两者是不同的,并且编译到不同的IL
关于为什么在公共字段上使用简单属性,属性允许您封装后面的实现。它们允许您在不更改接口的情况下更改类型内部构件。第一个不是属性。这是一个领域。它也是静态的 即使它不是静态的,而是一个实例变量,但两者是不同的,并且编译到不同的IL
关于为什么在公共字段上使用简单属性,属性允许您封装后面的实现。它们允许您在不更改接口的情况下更改类型内部构件。第一个是静态字段;它甚至不是一个财产 静态字段对于应用程序只有一个值 而第二个是实例属性,它对于类的每个实例都是不同的
在本例中,如果它是一个属性或字段,则没有太大区别。但从长远来看,如果在接口中使用属性,以后可能会更改它,使其具有实际的getter和setter,例如,验证或使对象对新值做出某种反应。字段只是一个字段,您无法控制它的设置时间和方式以及对它的反应。第一个字段是静态字段;它甚至不是一个财产 静态字段对于应用程序只有一个值 而第二个是实例属性,它对于类的每个实例都是不同的 在本例中,如果它是一个属性或字段,则没有太大区别。但从长远来看,如果在接口中使用属性,以后可能会更改它,使其具有实际的getter和setter,例如,验证或使对象对新值做出某种反应。字段只是一个字段,您无法控制设置它的时间和方式以及对它的反应 这两者有什么区别 第一个代码示例是字段,第二个代码示例是属性 字段是一个
类
成员,在调用构造函数
之前,其值在类
实例化(如果在类
定义上设置)上分配,并且在设置或获取它时您没有任何控制权:
public static int intId;
属性是一个类
成员,我可以将其描述为一个特殊的“字段”,您可以控制数据的设置和获取方式,换句话说,它是一种函数,但其行为类似于字段:
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
在您的示例中,int
属性使用的是static
int
字段,但您错误地使用了这两个字段:
私有
修饰符,而不是静态
,否则使用它没有意义,因为它可能是由外部源更改的private int _intId;
public int IntId
{
get
{
return _intId;
}
set
{
_intId = value;
}
}
这两者有什么区别
第一个代码示例是字段,第二个代码示例是属性
字段是一个类
成员,在调用构造函数
之前,其值在类
实例化(如果在类
定义上设置)上分配,并且在设置或获取它时您没有任何控制权:
public static int intId;
属性是一个类
成员,我可以将其描述为一个特殊的“字段”,您可以控制数据的设置和获取方式,换句话说,它是一种函数,但其行为类似于字段:
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
在您的示例中,int
属性使用的是static
int
字段,但您错误地使用了这两个字段:
私有
修饰符,而不是静态
,否则使用它没有意义,因为它可能是由外部源更改的private int _intId;
public int IntId
{
get
{
return _intId;
}
set
{
_intId = value;
}
}
对于类来说,它们是相同的int变量,但是第一个变量是静态int,它可以从类中访问,可以修改,并且它的任何实例都具有相同的值
public static int intId;
第二个是实例访问的,每个实例的值都是唯一的,因为它不是静态的,但是它是公共的,任何人都可以访问它
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
对于类来说,它们是相同的int变量,但是第一个变量是静态int,它可以从类中访问,可以修改,并且它的任何实例都具有相同的值
public static int intId;
第二个是实例访问的,每个实例的值都是唯一的,因为它不是静态的,但是它是公共的,任何人都可以访问它
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
第一个是无属性,它是一个字段。如果我告诉你:每次你设置intId,打印一个页面,你都可以使用属性。不是跟菲尔德。将属性视为M中的函数