各位大虾,我在学习属性时候写了这个简单的例子:
  
    class test1
    {
        private static int age;
        public static int Age {
            
            set { age = 34; }
            get { return age; }
         
        }
        static void Main(string[] args)
        {
            Age = 45325;
            Console.WriteLine("age:"+Age);
        }
  } 这样最后输出的就是age:34  可是要把 Age = 45325;注释掉 ,即为
   class test1
    {
        private static int age;
        public static int Age {
            
            set { age = 34; }
            get { return age; }
         
        }
        static void Main(string[] args)
        {
            //Age = 45325;
            Console.WriteLine("age:"+Age);
        }
  }这样怎么结果就变成age:0了

解决方案 »

  1.   

    关键时我觉得已经 set了Age的直  
      

  2.   

    你没有給属性赋值,也就是说age为空,在进行整形转换成字符的时候,就会默认采用 0。
      

  3.   

    因为setter和getter相当于两个方法你直接get,得到的是age的默认值,set未执行
      

  4.   

    你可以test1.Age = 1
    然后获得的Age就是34
      

  5.   


    可是不是也有那些只可读的属性,不是就只有get么,我还有点小疑惑的是,为什么他的默认直是0,我不是设置为34么
      

  6.   

    set访问器其实是方法,在你给他赋值时才会调用执行,而你的第二个例子并没有给属性Age赋值,所以没有调用set访问器,所以Age的值为默认值0
      

  7.   

    没有执行Set…… 
    直接调用还是初设化的值!
      

  8.   

    首先你要懂得set和get的意思!
    set 是设置值,可写入!get是获取值!
    你这个明白了,那你是用类名调用一下看看!肯定就是在类里面设置的值!
      

  9.   

    我还是没懂啊!为什么如果set以后  是在属性里面设置的值呢
      

  10.   

      你调试一下就知道结果了······我的理解是:先走的main函数里面,但你在外面定义了一个全局的静态的。所以最终走的是全局
      

  11.   

     这个我个人觉得跟set get无关,为什么, 按照步骤来,先走的main函数,然后在调用外面的方法,所以必然是外面的结果。
      

  12.   


    不明白LZ到底想要什么样的结果呢?
    你的意思是:即使  //Age = 45325; 结果也应该是age:34吗?
    如果是的话,那你的写法是错的,age压根就没得到值,怎么能返回34?
    还不如直接写成  private static int age;
      public static int Age 
      {
       
      get { return 34; }
       
      }
      

  13.   

    不是,不是,我现在疑惑的就是Age的初始值问题,初始值怎么会为0,我set的不是初始值么
      

  14.   


    很多只读属性获得的 是局部变量的值,而这些局部变量在其他方法操作中,已经发生了变化!!!age默认值为0你可以在set方法里面加Console.WriteLine(1); 看看是否执行这句
      

  15.   

    LZ可能有点混淆了,那样是赋值,带并不是赋初始值,如果要初始值的话可以这样 class test1
      {
      private static int age=34;
      public static int Age {
        
      set { age = value; }
      get { return age; }
        
      }
      
      

  16.   

    set 根本不是初始化用的,只是一个方法,不告诉他执行是不会执行的要初始化的话,直接在定义的地方,或者在构造函数里初始化 class test1
      {
      private static int age=34;  public static int Age {
        
      set { age = 34; }
      get { return age; }
        
      }
      

  17.   

    正常情况的话:
    private static int age;
      public static int Age {
        
      set { age = value; }
      get { return age; }
        
      }
    就好像餐厅点菜,你点(set)什么菜,就可以拿到(get)什么菜你的例子1:就好像餐厅只有一样菜,不管你点(set)什么,最后拿到(get)的都是那样菜例子2:虽然餐厅只要一样菜,但是你都不点,不进人家餐厅,你怎么会拿到菜呢如果你要直接不点菜(不调用set)就拿到菜的话,可以一开始就跟餐厅说,以后我来了不做说明就上那样菜,然后才会有你不点菜就能拿到菜的情况
    private static int age=34;
      public static int Age {
        
      set { age = value; }
      get { return age; }
        
      }
      

  18.   


    理解有误。
    关于类属性的get和set是如下解释:
    get:获取私有变量age的值,若类中没有对age进行初始化,则默认age为0;
    set:设置私有变量age的值,即实例化类test1后(假定实例为tst),进行tst.Age=“value”操作。
    至于类中的属性Age,你可以认为它是一个方法的入口,环境会根据Age所处的上下文确定到底该执行get操作还是set操作:如果你讲Age赋给某一个变量,则执行get操作,取出实例中的age变量值赋给某一个变量;若你给Age赋值,则执行set操作,将值传给实例中的age变量。
      

  19.   

    楼主应该好好读读课本,实际上这些东西课本上都说的很清楚的。
    给你个地址,上面有很多.net的电子书资源,你可以下载了看看:
    .Net技术精品资料下载汇总:C#语言篇
      

  20.   

      class test1
      {
      private static int age;
      public static int Age {
        
      set { age = 34; }
      get { return age; }
        
      }
      static void Main(string[] args)
      {
      //Age = 45325;
      Console.WriteLine("age:"+Age);
      }
      }
     lz 再注释掉//Age = 45325; 就不会执行set这个方法!只执行get;int类型得默认值就是0;
      

  21.   

    很简单啊。因为set和get是两个互相独立的方法。
    你初始化完成的时候 age=0.
    如果你执行一次set,则age=34.
    但是的测试代码没用执行set方法,所以age依然是0.使用get方法,不会调用set。而只是直接读取了age属性当时的值。如果你的意图是初始化就为34.那么添加一个私有字段比如
    ...
    int a=34.
    ...
    set { a = value;} //这个如果不需要写入值的话可以不写
    get{ return a;}
    ...