2012-02-17 82 views
2

可能重复:
Difference between Property and Field in C#为什么使用成员变量?

我开始了新的工作一对夫妇前使用C#周的(事情我已经基本上开始学习-since-在那里),我已经看到一对夫妇的做事方式,我很好奇,为什么(看到,因为我倾向于清新,他们都拿起东西在过去几年。)

基本上,我试图找出原因:

private int i; 

优于:

private int I {get;set;} 

如果答案是(我怀疑),额外的IL生成用于调用GET /套,那么为什么做autoimplemented获得/套都存在吗?为什么逊于

public int i; 

public int I{get;set;} 

更奇怪的是,别的我为什么不只是总是使用性质,或者为什么我不会避免autoimplemented方法,如瘟疫,一个或另一个。

我知道这听起来像是一个逻辑问题,当我想到它时,却没有那么多,所以我希望它写出某种意义。

感谢

+0

一般情况下,你会* *经常使用性能。我认为这是你的问题的答案,或者至少是你应该寻求的答案。至于它们为什么存在,考虑到这些属性是在私有字段的引擎下实现的,所以为了使属性正常工作,私有字段*需要被支持。因此,删除此功能将不会有多大意义。此外,自动属性(在问题中显示的简写语法)不是直到后来才为C#发明的,因此,不久前,程序员不得不手动编写所有后备字段。 – 2012-02-17 21:52:10

+0

你使用属性的原因是(你的'int I {get; set;}')是因为属性是你希望外界看到你的类的方式。 私人财产本质上是无用的。 您想使用公共属性而不是公共字段的原因主要是风格,不仅适用于您,也适用于使用反射的任何程序。 – 2012-02-17 21:53:07

+0

这已经回答 [这里] [1] [1]:http://stackoverflow.com/questions/3035790/purpose-of-getters-and-setters – 2012-02-17 21:55:41

回答

1

有很多次,当你需要额外的逻辑超出了自动实现属性定义。

例如,如果你想实现INotifyPropertyChanged的,在这种情况下,你需要自己的支持字段,所以你可以写:

private int someValue; 
public int SomeValue 
{ 
    get { return this.someValue; } 
    set 
    { 
     if (value != this.someValue) 
     { 
      this.someValue = value; 
      this.RaisePropertyChanged("SomeValue"); // This extra logic required... 
     } 
    } 
} 
相关问题