当前位置: 代码迷 >> C# >> 类属性定义时采取的类型和其操作的类字段的数据类型有什么关联
  详细解决方案

类属性定义时采取的类型和其操作的类字段的数据类型有什么关联

热度:84   发布时间:2016-05-05 04:44:17.0
类属性定义时采用的类型和其操作的类字段的数据类型有什么关联?
本帖最后由 menglibinghe 于 2015-03-02 22:59:12 编辑
如题,正在学习《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
  相关解决方案