下面两端代码,一个是标准写法,一个是自己写的简化代码,请问大家不用属性构造器直接用公共变量可以么?差别在哪里呢
ListItem自己定义的
public class ListItem2
{
public string ID;
public string Name;
public override string ToString()
{
return "[" + ID.ToString () + "]" + Name.ToString ();
}
}
ListItem标准写法
public class ListItem1
{
private string id = string.Empty;
private string name = string.Empty;
public ListItem1(string sid, string sname )
{
id = sid;
name = sname;
}
public override string ToString()
{
return "[" + id + "]" + name ;
}
public string ID
{
get
{
return this.id;
}
set
{
this.id = value;
}
}
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
}
ListItem自己定义的
public class ListItem2
{
public string ID;
public string Name;
public override string ToString()
{
return "[" + ID.ToString () + "]" + Name.ToString ();
}
}
ListItem标准写法
public class ListItem1
{
private string id = string.Empty;
private string name = string.Empty;
public ListItem1(string sid, string sname )
{
id = sid;
name = sname;
}
public override string ToString()
{
return "[" + id + "]" + name ;
}
public string ID
{
get
{
return this.id;
}
set
{
this.id = value;
}
}
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
}
解决方案 »
- 【wpf下或者winform下】如何识别usb设备的具体信息(u盘还是鼠标还是别的什么东西)?
- [求点子]C#如何实现windows窗体的这种效果[图],带有缩略图和地址栏的。
- ===============GDI+======================
- 高手请进,引用了外部dll的winform怎么在网页上引用??
- c# 编程,页面提示问题,像http://www.myTopWin.com/的页面的
- 按钮按下其他按钮按不了?
- Web里面如何使用Timer
- 请问Form为什么不显示啊!
- 在VC#里怎样才能 按回车和按了按扭一样的效果呀?
- c#怎么对鼠标进行控制?
- 一个dll如何知道他在注册表的值?类似这样的26338E77-36A6...
- 在datagridview更新数据库问题?急急急!
对你的例子来说
外界不能访问id,而只能通过ID来访问,也就是说外界并不知道你内部有个叫id的string,这样就达到了
对外界封装关于id信息的好处
2,两者有根本性区别
public static void GetValue(out int oId)
{
oId = 5;
}
public class Bean
{
public int idField;
private int idPropertyField_;
public int IdProperty
{
get {
return id_;
// todo 楼上所说的灵活性就体现于此
}
set {
id_ = value;
// todo 楼上所说的灵活性就体现于此
}
}
}
Bean bean = new Bean();
XXX.GetValue(out bean.idField); // OK
XXX.GetValue(out bean.IdProperty); // Error3,数据绑定则用Property
4,...
id_ = value; >> idPropertyField_ = value;
还有就是你这个只是简单的
但是有些是有特殊要求的比如只读的
只有一个get或者只有一个set等等
比如单一模式用到的属性
set赋值处就可以判断这个属性是否被实例化了还有一点 用属性规范点
我们就可以随时地改变字段的值了,因为有时有些字段是不允许修改的,这时
就可以直接设置get{}就行了,而如果只需修改而不允许查看是就直接设置
set{}。这些都是出于安全考虑。