看了好多程序,属性部分很多都类似于下面的写法,大家说说这样写到底有什么好处,还有两个小问题,在下面的注释那里。using System;namespace ConsoleApplication3
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Class2 C;
C = new Class2(20);
C.Print();
Console.ReadLine(); }
} class Class2
{
private int x=10; public Class2()
{} public Class2(int xValue)
{
X=xValue;
} public int X
{
get
{
return x;//问题1、这个return x到底是返回那个的值?
} set
{
x=value;//问题2、这个value是什么?他到底是那个的值?
}
} public void Print()
{
Console.WriteLine(x);
Console.WriteLine(X);
} }
}
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Class2 C;
C = new Class2(20);
C.Print();
Console.ReadLine(); }
} class Class2
{
private int x=10; public Class2()
{} public Class2(int xValue)
{
X=xValue;
} public int X
{
get
{
return x;//问题1、这个return x到底是返回那个的值?
} set
{
x=value;//问题2、这个value是什么?他到底是那个的值?
}
} public void Print()
{
Console.WriteLine(x);
Console.WriteLine(X);
} }
}
这个value就是set的一个参数。
2、 你设置的值 代码如果是 X = 20,value 就是20。这样写就是为了能够访问和设置类的私有变量x
x=value;其中value是外界赋给x的值;运行调试一下程序跟进去啥都明了了。
x当然是private int x=10;这个了, 就这一个变量叫x啊, lz应该知道C#里变量是区分大小写的吧
x=value;//问题2、这个value是什么?他到底是那个的值?
属性的本质实际上就是读方法和写方法
public int X
{
get
{
return x;
}
set
{
x=value;
}
}
就是public int GetX(){ return x; }和 public void SetX(int value) { x=value; }
当有读取属性X的操作的时候就会调用GetX(), 写属性X, 如X=1, 就是调用SetX(1)
这样解释lz明白了吗
x是当前值
x=value;//问题2、这个value是什么?他到底是那个的值?
value是你调这个方法时传进去的值,即你想给他的值
就是对私有变量x的操作,
有get的话,就返回x的值,但是返回给谁用啊?
有set的话,就改变x的值??
是不是这样啊?
和 this.x=value;就应该明白了吧对的你示例的情况只是省略了this关键字而已,这就是本类对象的的意思,this.x就是本类对象中的成员"x"OK,到此你应该清楚了吧!
int x
public int X
{
get{return this.x;}
set{this.x=value;}
}
}class B{
A a;public void Test(){
a.X=2;//如果执行句时,控制将通过对象a找到其属性X的set语句,并把value换成2
}
//重载Test方法
public void Test(int t){
a.x=t;//方式同上
}
}//end classB总而言之属性就是一层加在字段上的灵活和安全的"封装"..它就是为访问字段而存在的.
x是当前对象的私有字段xx=value;//问题2、这个value是什么?他到底是那个的值?
value是你调这个方法时传进去的值,即你打算赋给x的值优点:不用写诸如getValue(),setValue(int)这样两个方法就能很方便地访问私有字段
public class atoa_Info
{
private Int32 _nodeID;
/// <summary>
/// nodeID
/// </summary>
public Int32 nodeID
{
get{return _nodeID;}
set{_nodeID = value;}
}
当你创建一个atoa_Info的实例info时
如果你给info.nodeID付值时:
info.nodeID=1;
这个时候执行set{_nodeID=value}
如果你使用nodeID属性时:
int id=info.nodeID;
这个时候执行get{return _nodeID}
至于为什么这样写,你仔细看就会发现,这个类真正用来保存nodeID的是私有变量_nodeID
所以你可以明白这样写的好处了。