`

C# programming tips - setter to use Property while getter to use field

    博客分类:
  • C#
C# 
阅读更多

It is a common practise to have a backend field and a property that guard the access to it. 

 

if you type something like the propful , then you will have something like this 

 

 

    private string backendField;

    public string Property
    {
      get { return backendField; }
      set { backendField = value; }
    }

 

 

When you use the code, internally you might want to read raw data (the backend field directly), so that you will have the best flexibility. 

 

well, you may want to call the Property when you try to set some values, because in the setter, you can also update properties/fields that depends on the property. 

 

 internal PageOrientation PageOrientation
    {
      get { return m_pageOrientation; }
      set 
      {
        m_pageOrientation = value;
        PageOrientationString = value.ToString();
      }
    }

    internal string PageOrientationString
    {
      get { return (string)GetValue(PageOrientationStringProperty); }
      set {
        SetAndRaisePropertyChanged(PageOrientationStringProperty, value);
      }
    }
   // set the property via the PropertyKey and send notification on the update 
  // requirement on the containing object is that it should be a DependencyObject
    private void SetAndRaisePropertyChanged(DependencyProperty dp, object newvalue)
    {
      var oldvalue = GetValue(dp);
      SetValue(dp, newvalue);
      OnPropertyChanged(new DependencyPropertyChangedEventArgs(dp, oldvalue, newvalue));
    }
 

 

In the above code, the PageOrientationString depends on the Property of PageOrientation. so it makes sense to ripple the update when you set the value of PageOrientation; otherwise, you may call SetValue(PageOrientationProperty, value) followed by another call to SetValue(PageOrientationStringProperty, value);

 

which is tedious and error prone. 

 

 

NOTE: another tip is that it may also fine if  you read the property directly rather than read the backend field directly, it has advantage in certain situation, e..g if the property is a derived property which depends on several fields/properties. 

分享到:
评论

相关推荐

    【IT十八掌徐培成】Java基础第25天-03.递归获取所有超类-内省获取所有属性-getter-setter.zip

    在IT领域,特别是Java编程中,递归获取所有超类以及内省获取所有属性和getter、setter方法是两个重要的概念。这些技术对于理解和操作Java对象的结构和行为至关重要。让我们详细探讨这两个主题。 首先,我们来看递归...

    vue-setter:通过getter和setter进行数据绑定的插件

    VueSetter 通过getter和setter进行数据绑定的插件安装npm install --save vue-setter用法输入绑定<input type="text" v-setter.name="user" :value="user.getName()">将在输入时自动调用user.setName 。捆绑器...

    sql-params-setter.zip

    sql-params-setter.zip

    OC-模型的Setter,Getter的由来,@property的由来

    在OC中,我们经常使用“属性”(@property)来定义类的实例变量,并通过setter和getter方法来访问和修改这些变量。下面将详细探讨Setter、Getter的由来以及@property的由来。 首先,让我们回顾一下Setter和Getter的...

    signs_getter_setter:签署常量和Getter-Setter ..

    在JavaScript编程中,"signs_getter_setter"是一个常见的概念,它涉及到对象属性的访问控制和封装。标记常量通常是指将某些变量定义为不可更改的,而Getter-Setter则是一种面向对象编程中的特性,用于获取(get)或...

    checkm8-nonce-setter:用于与checkm8兼容的设备的随机数设置器

    checkm8-nonce-setter 用于与checkm8兼容的设备的随机数设置器iOS版本无关紧要。 如果您的设备与checkm8 + Linus Henze的Signature Check Remover兼容,则可以设置随机数并降级。 该脚本仅适用于macOS。 指示 - "./...

    vscode-php-getter-setter

    此扩展使您可以使用一个命令快速生成getter和setter。 它在vscode的命令面板中添加了3个命令: 插入PHP getter。 插入PHP setter。 插入PHP getter和setter。 扩展设置 此扩展程序提供以下设置: ...

    Eclipse setter/getter 注释成字段的注释

    在Java编程中,Eclipse是一款广泛使用的集成开发环境(IDE),它提供了许多便捷的功能,包括自动生成getter和setter方法。这些方法通常用于封装类的属性,以保护数据并实现对象的访问控制。当我们为类的每个字段添加...

    Spring - -setter方式 向bean中注入各种类型的值

    8. **源码分析**:标签中的"源码"可能意味着博主还深入解析了Spring框架中setter注入的相关源代码,解释了内部的工作原理,如BeanDefinition、PropertyValues、BeanWrapper等概念。 9. **工具使用**:"工具"标签...

    idea getter/setter插件

    该插件基于"getter-setter-postfix-idea-plugin-version-1.2.0"进行升级,它不仅提供了一键生成getter和setter的功能,还引入了allsetter和allbuilder的方法,进一步提升了代码编写效率。特别的是,此版本在生成...

    KVC底层原理举例代码-Setter方法

    在Objective-C(OC)编程中,Key-Value Coding(KVC)是一种强大的机制,它允许开发者通过键值的方式来访问和修改对象的属性,而无需直接调用getter或setter方法。KVC不仅简化了代码,还提供了对集合操作的便利。本...

    iOS getter setter方法

    在iOS开发中,getter和setter方法是Objective-C和Swift中对象属性访问的重要组成部分。它们用于获取(get)和设置(set)对象的属性值。本文将深入探讨getter和setter的概念、作用以及如何在代码中使用它们。 首先...

    VS2005(C#)插件Getter/Setter生成器

    VS2005(C#)插件Getter/Setter生成器是一款专为Visual Studio 2005设计的扩展工具,旨在提高C#编程的效率。该插件的主要功能是自动生成属性的getter和setter方法,这在编写面向对象的代码时非常常见。通过自动化这个...

    fewpjs-getter-and-setter-methods-v-000

    建立getter和setter方法以计算计算的属性 介绍 到目前为止,我们已经看到可以在class es中编写允许我们访问和更改属性的方法。 这些方法在某些情况下可以正常工作。 但是,我们知道可以使用的其他JS语法: get和set ...

    Does the parameter type of the setter match the return type of the getter?

    在Java或C#等面向对象语言中,一个标准的getter和setter可能会这样定义: ```java private int age; // 私有变量 public int getAge() { // getter return this.age; } public void setAge(int age) { // setter...

    build-name-setter-1.0.jar

    jar包,亲测可用

    build-name-setter-1.0-sources.jar

    jar包,亲测可用

    build-name-setter-1.3-h-1.jar

    jar包,亲测可用

    build-name-setter-1.3-h-1-sources.jar

    jar包,亲测可用

    Python @property及getter setter原理详解

    在Python编程语言中,`@property`装饰器和getter、setter方法是面向对象设计中的重要概念,它们允许我们控制类的属性访问,提供了一种优雅的方式来封装数据。下面将详细解释这些概念及其工作原理。 首先,`@...

Global site tag (gtag.js) - Google Analytics