C# 属性与get之间的差异;设置没有得到;设置

C# 属性与get之间的差异;设置没有得到;设置,c#,properties,static,get,set,C#,Properties,Static,Get,Set,我不理解静态属性之间的区别: public static int intId; public int intId { get { return intId; } set { intId = value; } } 得到;设置特性: public static int intId; public int intId { get { return intId; } set { intId = value; } }

我不理解静态属性之间的区别:

public static int intId;
public int intId
{
  get
  {
    return intId;
  }
  set
  {
    intId = value;
  }
}
得到;设置特性:

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

这两者有什么区别?它们的工作方式相同或不同?

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

始终将字段设置为私有字段,并将其包装到属性中,这是一种很好的做法


这样,您就可以在集合上添加验证,或者在子体中重写属性(如果它被标记为虚拟的话)。您还可以在get和set中添加一些复杂的代码,这些代码将对使用您的类的人隐藏。

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

始终将字段设置为私有字段,并将其包装到属性中,这是一种很好的做法


这样,您就可以在集合上添加验证,或者在子体中重写属性(如果它被标记为虚拟的话)。您还可以在get和set中添加一些棘手的代码,这些代码将对使用您的类的人隐藏。

第一个不是属性。这是一个领域。它也是静态的

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


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

第一个不是属性。这是一个领域。它也是静态的

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


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

第一个是静态字段;它甚至不是一个财产

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

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


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

第一个字段是静态字段;它甚至不是一个财产

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

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

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

这两者有什么区别

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

字段是一个
成员,在调用
构造函数
之前,其值在
实例化(如果在
定义上设置)上分配,并且在设置或获取它时您没有任何控制权:

public static int intId;
属性是一个
成员,我可以将其描述为一个特殊的“字段”,您可以控制数据的设置和获取方式,换句话说,它是一种函数,但其行为类似于字段:

public int intId
    {
        get
        {
            return intId;
        }
        set
        {
            intId = value;
        }
    }
在您的示例中,
int
属性使用的是
static
int
字段,但您错误地使用了这两个字段:

  • 您的字段应该使用
    私有
    修饰符,而不是
    静态
    ,否则使用它没有意义,因为它可能是由外部源更改的

  • 他们都有相同的名字,改变它

  • 就像这样:

    private int _intId;
    
    public int IntId
    {
        get
        {
            return _intId;
        }
        set
        {
            _intId = value;
        }
    }
    
    这两者有什么区别

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

    字段是一个
    成员,在调用
    构造函数
    之前,其值在
    实例化(如果在
    定义上设置)上分配,并且在设置或获取它时您没有任何控制权:

    public static int intId;
    
    属性是一个
    成员,我可以将其描述为一个特殊的“字段”,您可以控制数据的设置和获取方式,换句话说,它是一种函数,但其行为类似于字段:

    public int intId
        {
            get
            {
                return intId;
            }
            set
            {
                intId = value;
            }
        }
    
    在您的示例中,
    int
    属性使用的是
    static
    int
    字段,但您错误地使用了这两个字段:

  • 您的字段应该使用
    私有
    修饰符,而不是
    静态
    ,否则使用它没有意义,因为它可能是由外部源更改的

  • 他们都有相同的名字,改变它

  • 就像这样:

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

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

    public static int intId;
    
    第二个是实例访问的,每个实例的值都是唯一的,因为它不是静态的,但是它是公共的,任何人都可以访问它

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

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

    public static int intId;
    
    第二个是实例访问的,每个实例的值都是唯一的,因为它不是静态的,但是它是公共的,任何人都可以访问它

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

    第一个是无属性,它是一个字段。如果我告诉你:每次你设置intId,打印一个页面,你都可以使用属性。不是跟菲尔德。将属性视为M中的函数