V1 最开始的时候,这样定义成员变量
class EmployeeV1
{
public string Name;
}
V2 后来别人说,数据要隐藏,他们这样教我。于是每个成员变量都要配两个成员方法,就像两个保镖:一个用来给成员变量赋值;一个用来读取成员变量的值。
class EmployeeV2
{
private string Name;
public void SetName(string newName)
{
//我喜欢在这设置断点,有人还喜欢在这检查newName的有效性
Name = newName;
}
public string GetName()
{
return Name;
}
}
class EmployeeV1
{
public string Name;
}
V2 后来别人说,数据要隐藏,他们这样教我。于是每个成员变量都要配两个成员方法,就像两个保镖:一个用来给成员变量赋值;一个用来读取成员变量的值。
class EmployeeV2
{
private string Name;
public void SetName(string newName)
{
//我喜欢在这设置断点,有人还喜欢在这检查newName的有效性
Name = newName;
}
public string GetName()
{
return Name;
}
}
V3 再后来,他们说V2好傻,干脆发明了 属性(Property) 专门干这种事。还能用IDE的重构功能,不用手敲Property,不错。
class EmployeeV3
{
p
rivate string name;
public string Name
{
get
{
return name;
}
set
{
//同样可以设断点
name = value;
}
}
}
V4 接下来,他们发现V3更傻,软件中到处充斥着无聊的代码。于是他们体贴地升级了编译器,只要一行代码就能取代V3。
class EmployeeV4
{
//我的断点怎么没有了?
public string Name { get; set; }
}
class EmployeeV3
{
p
rivate string name;
public string Name
{
get
{
return name;
}
set
{
//同样可以设断点
name = value;
}
}
}
V4 接下来,他们发现V3更傻,软件中到处充斥着无聊的代码。于是他们体贴地升级了编译器,只要一行代码就能取代V3。
class EmployeeV4
{
//我的断点怎么没有了?
public string Name { get; set; }
}
V5 返祖了。
class EmployeeV5
{
public string Name;
}
class EmployeeV5
{
public string Name;
}
有些东西必须要public的,不论是直接或间接。