属性定义之间的区别(有和没有{get; set;})

时间:2013-04-26 20:19:54

标签: c# properties definition

我有这个

public int CityId { get; set; }

public int CityId;

如果我先使用它 - 它首先在EF代码中工作,而在第二个工作时则不工作。但是,如果我definte {get; set;}而不做其他事情,简单定义之间的确切区别是什么?我了解我可以为{get; set;}布局添加一些额外/自定义代码,但如果没有{get; set;},它是否会完全相同?

3 个答案:

答案 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)

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

example

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