0

我有这个

public int CityId { get; set; }

public int CityId;

如果我首先使用 - 它首先在 EF 代码中工作,而第二个 - 则不行。但是,如果我定义{get; set;}并且什么都不做,那么简单定义之间的确切区别是什么?我知道我可以在{get; set;}布局中添加一些额外/自定义的代码,但如果没有,它的工作方式不完全相同{get; set;}吗?

4

3 回答 3

2

使用这种语法:

public int CityId { get; set; }

您实际上是在创建一个自动实现的属性,并在幕后将其转换为:

private int _CityId;
public int CityId { 
    get
    {
        return _CityId;
    } 
    set
    {
        _CityId = value;
    }
}

这个语法:

public int CityId;

只是一个字段

于 2013-04-26T20:21:43.337 回答
2
public int CityId;

这是一个领域。

public int CityId { get; set; }

这是一个属性,编译器会自动为您生成一个私有字段来支持该属性。

他们是两个不同的东西。属性提供 getter、setter 或两者。属性上的“get”和“set”操作被编译为方法调用。

字段只是一个暴露的变量。公开字段通常被认为是不好的做法。

于 2013-04-26T20:21:51.047 回答
1

您正在寻找的差异称为封装。

例子

在您的示例中,字段和属性之间没有太大区别。该字段比属性具有更好的性能,因为它不需要调用方法来访问它。无论如何,一个字段的缺点是每个人都可以访问它,而您(持有该字段的类)对此没有任何控制权。

于 2013-04-26T20:24:24.217 回答