C# get和set,该如何解决
C# get和set
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有什么好处吗?
------解决方案--------------------
面向对象,对内部属性起一个封装,而且还可以做更多的事情和判断,不仅仅是给变量赋值
------解决方案--------------------
封装
为了变化
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的代码,所有引用的地方都不需要变化
------解决方案--------------------
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
------解决方案--------------------
set、get用于访问私有变量
类中的属性一般设置可访问性为private
get set为了给外部使用开放一个有限的可以访问私有变量的方法
------解决方案--------------------
如果没有定制性的处理的话,又不用考虑内外区分的话,
没啥区别
------解决方案--------------------
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有什么好处吗?
------解决方案--------------------
面向对象,对内部属性起一个封装,而且还可以做更多的事情和判断,不仅仅是给变量赋值
------解决方案--------------------
封装
为了变化
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的代码,所有引用的地方都不需要变化
------解决方案--------------------
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
------解决方案--------------------
set、get用于访问私有变量
类中的属性一般设置可访问性为private
get set为了给外部使用开放一个有限的可以访问私有变量的方法
------解决方案--------------------
如果没有定制性的处理的话,又不用考虑内外区分的话,
没啥区别
------解决方案--------------------
- C# code
class TimePeriod { private double seconds; public double Hours { get { return seconds / 3600; } set { seconds = value * 3600; } } }
------解决方案--------------------
当然
get set
也可以 做// 虚构的二维 数组
- C# code
// 虚构的二维 数组 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; } } }
------解决方案--------------------
get\set 为类属性, 主要是为了封装和赋值使用, 也可以根据get、set,让访问权限得到控制,即只能读取用get、只能赋值用set或两者都可以用 get、set
------解决方案--------------------
有一种情形是Field所不能做到,比如
private List<Items> m_items;
public Int32 count{get{return m_items.Count;}}
-不过也可以用public Int32 count()能做,不过写法上有些不同,好像Java中是没有属性这一概念