【发布时间】:2013-04-21 02:36:16
【问题描述】:
我有这个
public int CityId { get; set; }
和
public int CityId;
如果我首先使用 - 它首先在 EF 代码中工作,而第二个 - 则不行。但是如果我定义{get; set;} 并且什么都不做,那么简单定义之间的确切区别是什么?我知道我可以在{get; set;} 布局中添加一些额外/自定义的代码,但如果没有{get; set;},它的工作方式不完全相同吗?
【问题讨论】:
-
后者是字段,前者是属性。
-
从长远来看,属性提供了额外的好处(比如声明为
virtual、abstract或在接口中的能力)。有时重要的是,即使调用/使用代码可能相同(向/从看起来赋值/获取值就像相同的 C# 语法),切换是一个重大更改。利用您的代码的第三方必须重新编译他们的代码以匹配更改。如果他们只是替换已编译的 DLL 而不重新编译,他们将收到运行时错误。 -
我不能代表 EF,但我过去使用 NHibernate 的经验要求成员是属性(甚至可能是虚拟的?也许只是为了懒惰加载包/收藏)因为它会即时编译 subclasses ,这将覆盖/实现属性行为以延迟从数据库加载数据。这种行为(可能)不可能使用字段。
标签: c# properties definition