我有这个
public int CityId { get; set; }
和
public int CityId;
如果我先使用它 - 它首先在EF代码中工作,而在第二个工作时则不工作。但是,如果我definte {get; set;}
而不做其他事情,简单定义之间的确切区别是什么?我了解我可以为{get; set;}
布局添加一些额外/自定义代码,但如果没有{get; set;}
,它是否会完全相同?
答案 0 :(得分:2)
使用以下语法:
public int CityId { get; set; }
您实际上正在创建一个自动实现的属性,并在幕后将其转换为:
private int _CityId;
public int CityId {
get
{
return _CityId;
}
set
{
_CityId = value;
}
}
此语法:
public int CityId;
只是一个字段
答案 1 :(得分:2)
public int CityId;
这是一个字段。
public int CityId { get; set; }
这是一个属性,编译器将为您自动生成一个私有字段来支持该属性。
他们是两回事。物业提供吸气剂,二传手或两者。属性上的“get”和“set”操作被编译为方法调用。
字段只是一个公开的变量。人们普遍认为将这些领域公之于众。
答案 2 :(得分:1)
您正在寻找的差异称为封装。
在你的例子中,字段和属性之间没有很大的区别。该字段获得了比属性更好的性能,因为它不需要调用方法来访问它。无论如何,一个领域的缺点是每个人都可以访问它而你(持有该领域的类)对它没有任何控制。