如题,正在学习《C#入门经典》,看到第十章讲到类的属性用法,代码如下
public class MyClass
{
private int intVal;
public int Val
{
get
{
return Val;
}
set
{
Val=value;
}
}
请问大侠:
1.上述代码中类属性Val的数据类型和字段Val的数据类型是否必须一致?
2.代码value是否一个字母都不能更改,是否能使用一个其他随便什么名字的变量代替?
------解决思路----------------------
不一定,完全可以这么写
public class MyClass
{
private int aaa;
public string Val
{
get
{
return aaa.ToString();
}
set
{
aaa=int.Parse(value);
}
}
------解决思路----------------------
1.字段一般是隐藏的,外界通过属性来访问,如果类型不一样就没有意义了;
2.value是set访问器的隐藏的,内建的参数
(可以用其他的,但也得转为value)
如: set { Val = XXX(value);}
下面这篇文件讲的比较详细
http://www.cnblogs.com/jinianjun/archive/2011/10/23/2221893.html
------解决思路----------------------
1.上述代码中类属性Val的数据类型和字段Val的数据类型是否必须一致?
必须一致~因为C#是强类型语言,1楼说的是另外一个方面的东西
2.代码value是否一个字母都不能更改,是否能使用一个其他随便什么名字的变量代替?
set
{
Val=value;//这个的value一个字母都不可以修改
}
你搜索一下:C# 属性 本质
其他语言还没有属性这个概念,但他们有实现的方法,只是很繁琐~
------解决思路----------------------
你的代码不对了,应该是
public class MyClass
{
private int intVal;
public int Val
{
get
{
return intVal;
}
set
{
intVal=value;
}
}
1.上述代码中类属性Val的数据类型和字段Val的数据类型是否必须一致?
【回答】,不一定,属性你可以是两个函数get***和set***. 如果你只是返回或者设置 field, 类型当然必须一样。否则可以做些运算
class Test
{
private int intValue;
public string Val
{ get { return intValue.toString(); }
set{ intValue = int.Parse(value); }
}
}
2.代码value是否一个字母都不能更改,是否能使用一个其他随便什么名字的变量代替?
必须用valule, 它是像保留字一样的东西,会被编译器认出的。你改成其他的,编译器就认不出了。
这类有个单独的名字:contextual keyword.
https://msdn.microsoft.com/en-us/library/x53a06bb.aspx