class TimePeriod
{
    private double seconds;    public double Hours
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}c#里这种get,set很多,直接用
class TimePeriod
{
    private double seconds;    public double Hours;
}不行吗,用get,set有什么好处吗?

解决方案 »

  1.   

    封装为了变化class TimePeriod
    {
      private double seconds;  public double Hours;
    }
    其他调用 TimePeriod。Hours,当Hours需要变化的时候i,他是不能骗人的,所以所有引用的地方都需要变化class TimePeriod
    {
      private double seconds;  public double Hours
      {
      get { return seconds / 3600; }
      set { seconds = value * 3600; }
      }
    }当Hours需要变化的时候,只需要改get,set的代码,所有引用的地方都不需要变化
      

  2.   

    set get还可以控制的更多,如只读,只写等控制
    你可以参考
    http://msdn.microsoft.com/zh-cn/library/w86s7x04%28VS.80%29.aspx
    http://msdn.microsoft.com/zh-cn/library/75e8y5dd%28VS.80%29.aspx
      

  3.   


    set、get用于访问私有变量类中的属性一般设置可访问性为privateget set为了给外部使用开放一个有限的可以访问私有变量的方法
      

  4.   

    class TimePeriod
    {
      private double seconds;  public double Hours
      {
      get { return seconds / 3600; }
      set { seconds = value * 3600; }
      }
    }
    与下面的写法相似,只是用get set 来写要快一点。
    class TimePeriod
    {
      private double seconds;  public double setHours(double  h)
     {
           this.seconds = h* 3600;
     }
     public double getHours()
     {
           return this.seconds /3600;
     }
    }get,set 被大家称为属性,
    你直接写叫字段,
    用我上面的写法叫方法,
      这三种东东,是C#对象特有的东东。
      

  5.   

    当然
    get set
    也可以 做// 虚构的二维 数组
    // 虚构的二维 数组
    public class TowArray
    {
    public List<List<object>> data = new List<List<object>>(); public object this[int index1, int index2]
    {
    get
    {
    if (index1 < data.Count && index2 < data[index1].Count)
    {
    return data[index1][index2];
    }
    else
    {
    return null;
    }
    }
    set
    {
    while (index1 >= data.Count)
    {
    data.Add(new List<object>());
    }
    while (index2 >= data[index1].Count)
    {
    data[index1].Add(null);
    }
    data[index1][index2] = value;
    }
    }
    }
      

  6.   

    get\set 为类属性, 主要是为了封装和赋值使用, 也可以根据get、set,让访问权限得到控制,即只能读取用get、只能赋值用set或两者都可以用 get、set
      

  7.   

    有一种情形是Field所不能做到,比如
    private List<Items> m_items;
    public Int32 count{get{return m_items.Count;}}
    -不过也可以用public Int32 count()能做,不过写法上有些不同,好像Java中是没有属性这一概念