读书人

帮忙解释一下C#隐式参数value的传值机

发布时间: 2011-12-31 23:50:30 作者: rapoo

帮忙解释一下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的名字是不能改的。

读书人网 >C#

热点推荐