我有这个
public int CityId { get; set; }
和
public int CityId;
如果我首先使用 - 它首先在 EF 代码中工作,而第二个 - 则不行。但是,如果我定义{get; set;}
并且什么都不做,那么简单定义之间的确切区别是什么?我知道我可以在{get; set;}
布局中添加一些额外/自定义的代码,但如果没有,它的工作方式不完全相同{get; set;}
吗?
我有这个
public int CityId { get; set; }
和
public int CityId;
如果我首先使用 - 它首先在 EF 代码中工作,而第二个 - 则不行。但是,如果我定义{get; set;}
并且什么都不做,那么简单定义之间的确切区别是什么?我知道我可以在{get; set;}
布局中添加一些额外/自定义的代码,但如果没有,它的工作方式不完全相同{get; set;}
吗?
使用这种语法:
public int CityId { get; set; }
您实际上是在创建一个自动实现的属性,并在幕后将其转换为:
private int _CityId;
public int CityId {
get
{
return _CityId;
}
set
{
_CityId = value;
}
}
这个语法:
public int CityId;
只是一个字段
public int CityId;
这是一个领域。
public int CityId { get; set; }
这是一个属性,编译器会自动为您生成一个私有字段来支持该属性。
他们是两个不同的东西。属性提供 getter、setter 或两者。属性上的“get”和“set”操作被编译为方法调用。
字段只是一个暴露的变量。公开字段通常被认为是不好的做法。
您正在寻找的差异称为封装。
在您的示例中,字段和属性之间没有太大区别。该字段比属性具有更好的性能,因为它不需要调用方法来访问它。无论如何,一个字段的缺点是每个人都可以访问它,而您(持有该字段的类)对此没有任何控制权。