=======================================
C#中get和SET,看来看去还是看不懂,通俗一点解释一下,用了有什么好处,不用会怎么样
如果你这样写是没有什么不一样的.
private int __Old;
public int Old{
get{return __Old;}
set{__Old = value;}
}
但是如果你这样写就不一样了.
private int __Old;
public int Old{
get{return __Old;}
set{// 这里加入了验证代码
if(value<0)
throw new ArgumentOutException("value", "输入值不能小于0");
__Old = value;
}
上面的例子说明属性中可以添加些代码进行处理. 也可以设置的访问的权限等.
在类中定义一个属性
public class Student
{
private string name
public string Name
{
set{name=value;}//这里是给私有属性name赋值
get{return name;}//这里取出私有属性name的值
}
}
c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性。上述代码中如果去掉set部分,则外界只能读取name的值,如果去掉get部分,则只能给name赋值。这样就可以控制外界对私有属性name的访问权限了,这种写法是C#的一个特性。
get 和 set 会在相应的时候自动调用
主要是为了隐藏程序内的数据结构时用
get是获取该属性的值,
set设置该属性的值。
在用set时有一个特殊的变量value
就是设置属性时的值
value 隐式参数,用于设置访问器以及添加或移除事件处理程序。
对类的属性进行 设置
比如用类名.属性=“”赋值 set作用
变量=类名.属性 取值 get 作用
=====================================
【如果 觉得有帮助 请把帖子 修改为 提问 结束 谢谢】作者: 陈君 时间: 2014-5-17 17:29
我先前面两位朋友都没真正理解楼主问的是什么问题。这里我来谈谈我的看法。
先用代码来说明一切
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 论坛问题2
{
class C
{
int i;
public int I
{
get { return i; }
set { i = value; }
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 论坛问题2
{
class Program
{
static void Main(string[] args)
{
C c = new C();
c.I = 1;
Console.Write(c.I);
Console.ReadKey();
}
}
}
这里用创建了一个属性 int i;
public int I
{
get { return i; }
set { i = value; }
}这种是大家最常见的格式,因为是直接用快捷键创建出来的。
最后输出的结果是1.
然后在用楼主提到的那种属性格式来试试
public int I
{
get ;
set ;
}
最后输出的也是1;但是我们设断点来看看局部变量的值
图好像有点小,这里我们可以发现,我们的属性I的值为1;而i的值竟然是0;那是不是说明public int I
{
get ;
set ;
}这种方式的get,得到的其实是I的值呢?好像是这样的。
public int I
{
get { return i; }
set { i = value; }
}而这种属性如果我们把它改成
public int I
{
get return;
set { i = value; }
}这样会怎么样呢?是不是我们可以通过I改i的值,但是当我们需要通过I输出i的值的时候实际上输出的是I的值呢?
然后我们发现系统我们报错了。果然微软想得很全面,如果这种属性能编译通过的话,就会给用户照成很大的危害。因为属性是我们为了用来封装字段但是又想给别人留下来的接口。如果这种属性被允许的话,其它类的使用者就可能产生疑惑。