属性与get的区别;设置;没有得到;设置;

本文关键字:设置 属性 get 区别 | 更新日期: 2023-09-27 18:09:06

我不明白静态属性之间的区别:

public static int intId;

和获取;设置;属性:

public int intId
{
  get
  {
    return intId;
  }
  set
  {
    intId = value;
  }
}

这两者的区别是什么?它们的工作原理相同还是不同?

属性与get的区别;设置;没有得到;设置;

第一个示例是一个字段,而不是属性。

总是将字段设为私有,并将它们包装在属性中是一个很好的做法。

这样你就可以在后代中添加对set或override属性的验证(如果它被标记为virtual)。您还可以在get和set中添加一些复杂的代码,这些代码将对使用您的类的人隐藏。

第一个不是属性。它是一块田地。它也是一个静态

即使它不是静态的,而是一个实例变量,这两者也是不同的,并且编译成不同的IL。

关于为什么在公共字段上使用简单属性-属性允许您封装后面的实现。它们允许您在不更改接口的情况下更改类型内部。

对于类来说它们是相同的整型变量,但是第一个因为是静态整型,所以可以从类中访问它,并且可以更改它的任何实例都具有相同的值。

public static int intId;

第二个变量只能被实例访问,并且每个实例的值都是唯一的,因为它不是静态的,但它可以被任何人访问,因为它是公共的。

 public int intId
    {
        get
        {
            return intId;
        }
        set
        {
            intId = value;
        }
    }

第一个是静态字段;它甚至不是一个属性

静态字段对于应用程序来说只有一个值。

第二个属性是实例属性,对于类的每个实例都是不同的。

在本例中,如果它是一个属性或字段,则没有太大区别。但从长远来看,如果你在接口中使用属性,你可能会在以后更改它,让它有一个实际的getter和setter来做例如,验证或让对象对新值做出某种反应。字段只是一个字段,您无法控制何时以及如何设置它并对其作出反应。

这两者的区别是什么?

第一个代码示例是一个字段,第二个代码示例是一个属性。

字段是class成员,它的值在class实例化(如果它在class定义上设置)上分配,在constructor被调用之前,您在设置或获取它时没有任何控制:

public static int intId;

属性是class成员,我可以把它描述为一个特殊的"字段",你可以控制数据的设置和使用方式,换句话说——封装,它是一种函数,但表现得像一个字段:

public int intId
    {
        get
        {
            return intId;
        }
        set
        {
            intId = value;
        }
    }

在你的例子中,int属性正在使用static int字段,但你正在做一个错误的使用:

  1. 您的字段应该使用private修饰符而不是static,否则使用它是没有意义的,因为它可能是从外部来源更改的

  2. 它们都有相同的名称,更改它

这样的

:

private int _intId;
public int IntId
{
    get
    {
        return _intId;
    }
    set
    {
        _intId = value;
    }
}