【发布时间】:2010-10-04 07:36:40
【问题描述】:
我想知道属性中的“值”关键字采用什么类型。
所以:
public class Test
{
string _numberAsString;
int _number = -1;
public Test() {}
public string NumberAsString
{
get { return _numberAsString; }
set { _numberAsString= value; }
}
public int Number
{
get { return int.Parse(_numberAsString); }
set { _number = value; }
}
}
//elsewhere
Test t = new Test();
t.Number = 5;
现在,正如我所料,这不会编译。 “值”的类型由属性的返回类型决定,对吗?我找不到任何效果,也许它太明显了(我没有阅读语言规范,大概那里有什么)。
我问,因为我想用一种类型设置属性,然后将其转换为 getter 的类型。我想这真的没有意义。
看来我必须通过创建几个方法来实现这一点。
【问题讨论】:
-
嗯,你的代码确实编译了。至少,它对我有用......
-
它也为我编译,但如果你调用,你会得到一个 ArgumentNullException: int val = t.Number;就在 //elsewhere 下的赋值之后,因为 _numberAsString 为空。如果你打电话 t.NumberAsString="6";首先然后调用 int val = t.Number; val 将为 6。您可能希望摆脱 _numberAsString 或 _number 并更改 Number 和 NumberAsString 以接受并返回您保留的任何一个。您可以使用 int 或 string 设置/获取,但实际数据只会在一个地方。
-
嗯...注意自己。在你忘记你为什么问这个问题之前检查答案。现在我觉得很粗鲁,因为我不知道该接受哪个答案,因为我忘记了上下文。
标签: c# properties types keyword