属性定义(带和不带{get;设置;})
本文关键字:设置 get 定义 属性 | 更新日期: 2023-09-27 18:11:08
我有这个
public int CityId { get; set; }
和
public int CityId;
如果我使用第一个-它首先在EF代码中工作,而第二个-不工作。但是如果我定义了{get; set;}
,什么都不做,和简单的定义有什么区别?我知道我可以添加一些额外的/自定义代码到{get; set;}
布局,但如果没有{get; set;}
,它的工作不完全相同吗?
public int CityId;
这是一个字段
public int CityId { get; set; }
这是一个属性,编译器会自动为你生成一个私有字段来支持该属性。
这是两码事。属性提供了getter、setter或两者。属性上的"get"answers"set"操作被编译为方法调用。
字段只是一个暴露的变量。将字段公开通常被认为是不好的做法。
语法如下:
public int CityId { get; set; }
你实际上是在创建一个自动实现的属性在幕后它被翻译成这样:
private int _CityId;
public int CityId {
get
{
return _CityId;
}
set
{
_CityId = value;
}
}
这个语法:
public int CityId;
只是一个字段
您正在寻找的差异称为封装。
例子在您的示例中,字段和属性之间没有很大的区别。字段的性能优于属性,因为它不需要调用方法来访问它。无论如何,字段的缺点是每个人都可以访问它,而你(持有字段的类)对它没有任何控制权。