日期:2014-05-19  浏览次数:20674 次

属性是怎么实现的,在线等....就这多分了.谢谢
private   int   _maxValue;

private   int   maxValue;
get{   return   _maxValue;}
set{_maxValue=value;}

_maxValue   和maxValue是怎么联系起来的,

_maxValue=10;它怎么就知道去访问maxValue,然后把value去赋值给_maxValue.
当读的时候也是一样,怎么就知道从maxValue里去执行它的get方法.

------解决方案--------------------
private int _maxValue;

public int maxValue; //应该是public
get{ return _maxValue;}
set{_maxValue=value;}

至于为什么要这么呢?我觉得是:体现了面向对象的封装,细节隐藏等等.其他的我也不清楚了,建议你去问问比尔,或者看看面向对象设计方法吧!
------解决方案--------------------
_maxValue 和maxValue是怎么联系起来的,

_maxValue=10;它怎么就知道去访问maxValue,然后把value去赋值给_maxValue.
当读的时候也是一样,怎么就知道从maxValue里去执行它的get方法.


他们之间没有联系

_maxValue = 10与maxValue没有任何关系,只不过你去取maxValue的值的时候,他return的是你修改后的_maxValue的值。

你可以在get和set中抛出异常观察你对_maxValue操作的时候他们有没有被执行。
------解决方案--------------------
用ildasm看一下 编译后其实是两个方法
------解决方案--------------------
刚才没看清,你这样写是编译通不过的。

private int maxValue;
get{ return _maxValue;}
set{_maxValue=value;}


private int maxValue//没有分号。
get{ return _maxValue;}
set{_maxValue=value;}


至于他怎么找,属性的定义语法本来就是这样,你写成这样是一样的效果

private int maxValue get{ return _maxValue;} set{_maxValue=value;}

------解决方案--------------------
^_^,这个就是面向对象的一个特性,确保数据的安全,
------解决方案--------------------
设置属性时,其实针对get set都会同样生成另一个方法...
如果是java里应该就是要自己实现的那种方法..
比如 private string _name;
public string Name
{
get{return _name;}
set{_name = value;}
}
public string get_Name()
{
return _name;
}
public strin set_Name(string value)
{
_name = value;
}
当C#编译器看到代码试图读取或者设置一个属性时,她实际上会产生对相应方法的一个调用..而这方法应该是我们不可见的.
------解决方案--------------------
你這樣理解把,把它看成是下面的簡寫。
private int _maxValue;
public int SetValue(int maxValue)
{
_maxValue = maxValue;
}
public void GetValue()
{
return _maxValue;
}

在Vs.net的下個版本里,繼續簡化成了
public int maxValue {get; set;}

------解决方案--------------------
在一个类中定义属性
public class ItemNode
{

private string nodeNameField;

private string nodeValueField;

public ItemNode(string nodeNameField,string nodeValueField)
{
this.nodeNameField=nodeNameField;
this.nodeValueField=nodeValueField;
}
/// <remarks/>
public string NodeName
{
get
{
return this.nodeNameField;
}
set
{
this.nodeNameField = value;
}
}

/// <remarks/>
public string NodeValue
{
get
{
return this.nodeValueField;
}
set
{
this.nodeValueField = value;
}
}
}
------解决方案--------------------
属性结合了字段和方法的多个方面。
1.对于对象的用户,属性显示为字段,访问该属性需要完全相同的语法。
2. 对于类的实现者,属性是一个或两个代码块,表示一个 get 访问器和/或一个 set 访问器。当读取属性时,执行 get 访问器的代码块;当向属性分配一个新值时,执行 set 访问器的代码块。

访问性:
1.不具有 set 访问器的属性被视为只读属性。
2.不具有 get 访问器的属性被视为只写属性。