属性是怎么实现的,在线等....就这多分了.谢谢
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 访问器的属性被视为只写属性。
3.同时具有这两个访问器的属性是读写属性。
属性具有多种用法:
1.它们可在允许更改前验证数据;
2.它们可透明地公开某个类上的数据,该类(OO里面我们通常称为业务实体类)的数据实际上是从其他源(例如数据库)检索到的;
3.当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。
为什么属性具有如此的优点?因为属性本质上就是方法!!!
private int _maxValue;
pubic int maxValue;
get{ return _maxValue;}
set{_maxValue=value;}
实际C#编译器会生成类似如下的代码
private int _maxValue;
pubic int get__maxValue() { return _maxValue; }
public void set__maxValue(int value) { _maxValue=value; }