自动属性与带字段的属性

问题描述 投票:0回答:1

这两者有什么区别吗?

int a;
public int A
{
    get => a;
    set => a = value;
}
public int A { get; set; }
c# oop properties field
1个回答
0
投票
public int A { get; set; }

与说的完全一样:

private int _A;
public int A
{
    get => _A;
    set => _A = value;
}

自动属性只是private字段以及公共getter和setter的语法糖。它允许您访问和改变字段(作为属性),而无需 getter 和 setter 方法的样板。我们必须始终封装我们的数据,而属性旨在加快写出数据的过程

如果这是java,你会得到类似的东西:

private int a;

public void setA(int a){
    this.a = a;
}

public int getA(){
    return a;
}

在 Java 中创建类时,您必须习惯性地定义 getter、setter、哈希码和字符串方法。当然,现代 IDE 确实会为您生成这些的库存实现,但在心理上它已成为给定的。如果我们例行创建的这些方法中没有特殊的逻辑,为什么要被迫将其写出来呢?自动道具旨在消除一些麻烦。它只是一种提高代码质量的语法,使代码看起来更简洁。它预先告诉您您已经拥有开箱即用的库存访问器和修改器

它也非常模块化,请查看文档以了解如何制作诸如私有设置器之类的东西,使用

init
进行不变性后 obj 构造等

在 C# 中使用公共属性几乎总是比使用公共字段更可取,最容易记住的方法是:私有字段、上面任何访问模式的属性

© www.soinside.com 2019 - 2024. All rights reserved.