zoukankan      html  css  js  c++  java
  • 字段和属性的区别

    今天写一个wpf的demo,用到绑定数据,给控件绑定了数据源,但是数据却没有显示出来,排查代码发现绑定数据源的的成员用的是字段不是属性。

    前端代码:

    <Grid>
      <StackPanel Grid.Row="2" Margin="10">
      <ListBox x:Name="listBox" Height="100">
    
      </ListBox>
      </StackPanel>
    </Grid>

    后台代码:

    public Window3()
            {
                InitializeComponent();
                List<Employe> list = new List<Employe>()
                    {
                        new Employe() { name="jack",age=18},
                        new Employe() { name="bob",age=20},
                         new Employe() { name="alice",age=21}
                    };
                listBox.ItemsSource = list;
                listBox.DisplayMemberPath = "name";
                listBox.SelectedValuePath = "age";
            }
    //实体 
    public class Employe
            {
                public string name { get; set; }
                public int age { get; set; }
            }

    如果把Employe的name,去掉{get;set;},改为一个字段, public string name;数据就无法绑定了。原因是属性的访问是由访问器完成的,因而属性可以进行数据绑定。

     

    网上的文章有很多,但是好些没说到重点,基本都是说属性可以保护数据安全云云之类,整理了一下,有一下几个区别:

    相同点:
    都是类的成员,属性是类的属性,而字段是类的数据成员

    不同点:
    1 属性可进行数据绑定
    2 属性可通过set和get方法进行数据安全性检验,而字段不行
    3 属性可进行线程同步
    public string Name
    {
         set{
            lock(this)
            {
            }
         }
    }
    4 属性可以是抽象的,而字段不行
    5 属性可以接口的形式表现
    6 基于属性的索引
    7 不要直接把字段转化为属性

    MSDN:

    属性与字段

    属性与字段都可在对象中存储和检索信息。它们的相似性使得在给定情况下很难确定哪个是更好的编程选择。
    在以下情况下使用属性过程:
       1. 需要控制设置或检索值的时间和方式时。
       2. 属性有定义完善的一组值需要进行验证时。
       3. 设置值导致对象的状态发生某些明显的变化(如 IsVisible 属性)。
       4. 设置属性会导致更改其他内部变量或其他属性的值时。
       5.必须先执行一组步骤,然后才能设置或检索属性时。
    在以下情况下使用字段:
       1. 值为自验证类型时。例如,如果将 True 或 False 以外的值赋给 Boolean 变量,就会发生错误或自动数据转换。
       2. 在数据类型所支持范围内的任何值均有效时。Single 或 Double 类型的很多属性属于这种情况。
       3. 属性是 String 数据类型,且对于字符串的大小或值没有任何约束时

  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/Serialport/p/10008725.html
Copyright © 2011-2022 走看看