用私人财产支持公共财产?

时间:2016-06-27 14:56:16

标签: c#

我正在查看一些代码并发现了这种模式:

private string text { get; set; }
public string Text
{
    get
    {
        return text;
    }
    set
    {
        text= value;
        RaisePropertyChanged("Text");
    }
}

我通常只使用私有字段支持我的公共属性。

有没有理由应该像这样的私有财产支持一个属性?我的直觉是说它不应该,而且应该由一个字段支持,是吗?我可以用什么技术原因支持这个?

1 个答案:

答案 0 :(得分:1)

典型情况是,当您拥有原始数据(没有任何转换的数据)和相同数据时,但友好代表:

  private String m_RawText;

  // Text as it's obtained from, say, database 
  private string rawText { 
    get {
      if (null == m_RawText)
        m_RawText = ReadValueFromDataBase();

      return m_RawText;
    } 
    set {
      if (m_RawText != value) {
        UpdateValueInDataBase(value);

        m_RawText = value;
      }
    }  
  }

  // Friendly encoded text, for say UI
  public string Text {
    get {
      return EncondeText(rawTex);
    }
    set {
      rawText = DecodeText(value);

      RaisePropertyChanged("Text");
   }
 }  

 // Here we want rawText
 public void PerformSomething() {
   String text = rawText; // we want raw text...
   ...
 } 

 // And here we prefer Text
 public override String ToString() {
   return String.Fromat("Text = {0} ", Text, ...)
 }