属性定义(带和不带{get;设置;})

本文关键字:设置 get 定义 属性 | 更新日期: 2023-09-27 18:11:08

我有这个

public int CityId { get; set; }

public int CityId;

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

属性定义(带和不带{get;设置;})

public int CityId;

这是一个字段

public int CityId { get; set; }

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

这是两码事。属性提供了getter、setter或两者。属性上的"get"answers"set"操作被编译为方法调用。

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

语法如下:

public int CityId { get; set; }

你实际上是在创建一个自动实现的属性在幕后它被翻译成这样:

private int _CityId;
public int CityId { 
    get
    {
        return _CityId;
    } 
    set
    {
        _CityId = value;
    }
}
这个语法

:

public int CityId;

只是一个字段

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

例子

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