一直认为定义属性的格式是:
private int m_mp;
public int MyProperty
{
get { return m_mp; }
set { m_mp = value; }
}
可是在用VS2008的"prop"自动实现属性代码段时出来的却是
public int MyProperty { get; set; }
想问一下这样写可以吗?
还有就是这样做把属性这样封装起来有什么好处,直接调用类里的字段不行吗?
private int m_mp;
public int MyProperty
{
get { return m_mp; }
set { m_mp = value; }
}
可是在用VS2008的"prop"自动实现属性代码段时出来的却是
public int MyProperty { get; set; }
想问一下这样写可以吗?
还有就是这样做把属性这样封装起来有什么好处,直接调用类里的字段不行吗?
解决方案 »
- 正则表达式替换问题
- C#如何随机输出一个GB2312中的汉字呢?
- 在线等,一个简单的问题,怎么在GRID中添加一列BUTTON
- 需要做一个财务类的软件,用winform好还是用asp.net好呢?
- 如何让treeview控件响应鼠标事件
- 怎样获取硬盘序列号,主板序列号?
- 关于datagridview中数据修改的问题,急!!!!!!
- 在C#中。。form之间调用的问题。。望大虾们指教!!谢谢
- 如何向其他窗口postmessage 按住ctrl后再点击鼠标左右键,再松开ctrl? 论坛上相关帖子虽多,没有哪个是解决的....
- 求正则表达式
- [非常急]C#如何引用相对路径的dll文件
- 如何把C#的DATETIME类型的日期存储到sql里面?存储为什么类型好呢?在线等....
public int MyProperty { get; set; }这样写只是vs2008提供的“懒人写法” 呵呵 等同于
public int MyProperty
{
get { return m_mp; }
set { m_mp = value; }
}这样使用属性可以控制其读写性,如果让属性只能读就只提供get
public int MyProperty
{
get { return m_mp; }
set { m_mp = value; }
}
一样用法。值取得还是字段的值,字段的值当然要你赋啦,属性只是2个方法而已。
public class Person { private string _firstName;
private string _lastName;
private int _age;
public string FirstName { get {
return _firstName;
}
set {
_firstName = value;
}
} public string LastName { get {
return _lastName;
}
set {
_lastName = value;
}
}
public int Age { get {
return _age;
}
set {
_age = value;
}
}
} 注意,我们在属性的geter/setter中实际上并没有添加什么逻辑,我们只是将get/set实施到了一个成员变量。我们不禁要问这样一个问题:为什么不直接使用成员变量而使用属性呢?这是因为,向外面呈现公开的成员变量有很多不好的地方。二个最大的问题是:1) 你无法轻易地对成员变量做数据绑定,2) 如果你从类中向外呈现成员变量的话,之后,你不重新编译那些引用老的类的任何程序集,就无法将它们改成属性(譬如,要添加验证逻辑到setter里)。 Orcas中发布的新C#编译器通过一个叫“自动属性(automatic properties)”的语言特性提供了一个优雅的方式来使得你的编码更加简洁,同时还保持属性的灵活性。自动属性允许你避免手工声明一个私有成员变量以及编写get/set逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set 操作。譬如,使用自动属性,我现在可以将上面的代码改写成:
public class Person {
public string FirstName {
get; set;
} public string LastName {
get; set;
}
public int Age {
get; set;
}
} 或者,我想更简明的话,我可以将空白的地方做进一步压缩,象这样:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
} 当Orcas版中的C#编译器遇上象上面这样的空的get/set属性的话,它会自动为你在类中生成一个私有成员变量,对这个变量实现一个公开的getter 和setter。这么做的好处是,从类-合同(type-contract)的角度来看,这个类跟我们上面第一个有点冗长的实现看上去完全一样,这意味着,不象公开的成员变量,在将来,我可以在我的属性setter实现中添加验证逻辑,而不用对引用我的类的任何外部组件做改动。
public int A
{
get{return a;}
set{
a=value ;
}
}
VS2008 没有看过的
public string FirstName {
get {
return _firstName;
}
set {
_firstName = value;
}
}
上面的代码可以添加属性,但是并没有帮助属性添加说明
在设计器得属性中可以看到 FirstName 但是没有对于这个属性得说明文字