2016-12-11 40 views
0

有人可以告诉我,什么是使用公共财产为私人类成员,但没有实现任何设置和获得部分?我知道这可能只是为示例,并且以后可以实现的东西,但我不知道是否有使用它就像空集的财产目的得到

+0

这可能是一个自动实施的属性。取决于你的意思是空的,而不管它是VB还是C# – Plutonix

+0

你是指自动属性?即public int Foo {get;设置;} –

+0

@MichalHainc我不认为这是一个重复的问题。仔细阅读他的问题,看看我的答案。 – CodingYoshi

回答

2

我打算假设您知道有一个由C#编译器生成的专用字段,作为备份此属性的字段。它是句法糖。我也会假设你知道这是一个自动实施的属性。那么,如果在getset中公开没有逻辑的财产,那么它又有什么意义呢?换句话说,任何类都可以访问它并设置它的值。那么为什么选择这个属性在公共领域?

它的宗旨是:

  1. 今天getset是空的,但它可能需要在未来的代码。为避免将来违约,请使用空的getset
  2. 大多数.NET数据绑定都可以针对属性而不是字段来完成。所以尽管它是空的,它仍然有更大的目的。
  3. getset可以具有访问修饰符。例如,您可以说set是私人的,但get是公开的。
  4. 一个字段不能在接口中使用,但属性可以。
+0

这正是我所期待的,谢谢您! – wookiee

1

当你看到

public int Count { get; set; } 

为成员的任何意义一类,即不是什么都没有。你只是推迟到自动属性的默认实现。这大概,

private int _count; 

public int get__Count() 
{ 
    return _count; 
} 

public void set__Count(int value) 
{ 
    _count = value; 
} 

你只需语法糖在C#中使用这些方法大致是这样一个领域,即

instanceOfObject.Count = 42; // Not a field access, but behind the scenes a method call. 
+0

这个问题肯定有重复,我确定你是一个成熟的SO用户,并在试图为你篡夺任何积分之前进行过搜索 –

+0

@Mic halHainc这是一个公平的意见。如果您认为我的回答没有用处,或者对Stack Overflow无贡献,欢迎您投票。 – jdphenix

+0

不,我不想这么说,我只是喜欢DRY的原则...并且不喜欢重复的东西,您的意愿可以帮助开发人员仍然感激尽管 –

1

这是在C#中的“自动执行”属性。实际上,房地产作为一个完整的财产,即:

此:

public int Number { get; set; } 

等同于:

private int _number; 

public int Number 
{ 
    get 
    { 
     return this._number; 
    } 
    set 
    { 
     this._number = value; 
    } 
} 

这可以防止不必键入出完整的财产申报。当你在getter和/或setter中没有任何额外的逻辑时,这很有用。

例如,在进行简单的数据检索时,我经常使用自动实现的属性,并发现它们使我的类更加简洁。