日期:2014-05-20  浏览次数:20731 次

帮忙解释一下C#隐式参数value的传值机制是怎么样的?先谢了。
问题是在我创建Web用户控件的时候产生这样的疑问的.
Private string strLoginid
{
  set{
  loginid.text = value;//只写属性
  }
  get{
  return loginid.text;//只读属性
  }
}
value?怎么样的东西,开始以为是自定义的参数,后来才知道是个隐式参数.
如果这里自己定义一个参数来代替它,该怎么做呢.请不吝赐教.

------解决方案--------------------
Private string strLoginid (string my_value)

set{ 
loginid.text = value;//只写属性 

get{ 
return loginid.text;//只读属性 


这样??

------解决方案--------------------
Private string strLoginid 

set{ 
loginid.text = value;//只写属性 

get{ 
return loginid.text;//只读属性 

}

等同于
private void SetstrLoginid(string value)
{
loginid.text = value;
}

private string GetstrLoginid()
{
return loginid.text; 
}

public property string strLoginid read GetstrLoginid write SetstrLoginid;

这个是类似以前Delphi的写法,为了简单就变现在那样了。
知道是个什么意思就行了,说白了就是最后一句靠编译器实现,意思是声明一个字符串属性strLoginid,取值的时候用GetstrLoginid方法,赋值的时候用SetstrLoginid方法。
------解决方案--------------------
value 在C# 里面是一个 准关键字了!
 你为什么要修改 呢?
------解决方案--------------------
没有必要的吧,实在是想那样的话,示意如下
object myValue;
Private string strLoginid
{
set{
getMyValue();//这里先将自己定义的myValue获取到值
loginid.text = myValue;//只写属性
}
get{
return loginid.text;//只读属性
}


------解决方案--------------------
public string strLoginid 

set{ 
loginid.text = value;//只写属性 

get{ 
return loginid.text;//只读属性 



在编译成IL以后会变成两个方法,分别是
string get_strLoginid ()

void set_strLoginid (string value)

不存在属性了。

在这里,value的名字是不能改的。