none
C# 属性vs公共变量? RRS feed

  • 问题

  • class MyValue
    {
      public string StringValue;
    }

    class MyValue2
    {
      private string _stringvalue;
      public string StringValue
      {
        get { return _stringvalue;}
        set { _stringvalue = value;}
      }
    }

    话说这两个类有啥区别?假设不需要其他的操作,只是作为纯数据类。

    霸王
    2010年3月5日 12:44

答案

  • 简单聊一下吧:
    数据类中的属性
    1,符合面向对象思想
    2,方便封装,而且属性可以是只写的和只读的
    3,避免定义过多的变量
    4,可以保护字段,字段做成保护型的,但属性可以对外开放
    5,CS程序里面属性甚至可以当做全局来使用

    总的来说好处还是很多的
    咯咯
    • 已标记为答案 Jimt200010 2010年3月6日 12:39
    2010年3月5日 15:24
  • 你好!
         一般在C#中,想“暴露”类中的某些数据给用户可以使用两种方式来实现,一种是使用公有字段,另外一种是使用属性来实现,下面我列举一些代码来比较 这两种实现:

    1,使用公有字段:

    public class Student

    {

         public string Name;

    }

    2,使用属性:

        public class Student
        {
            private string _name;
            public string Name
            {
                get
                {
                    return _name;
                }
                set
                {
                    _name = value;
                }
            }
        }

    客户代码都是 一样的:

            static void Main(string[] args)
            {
                Student studentOne = new Student();
                string name = studentOne.Name;
                studentOne.Name =inputString;
            }

    看上去似乎直接使用公有字段更简洁些,但是请大家留意这种情况,比如过一段时间需求更改为不允许对Name设置空值,使用公 有字段就需要修改客户代码了:

            static void Main(string[] args)
            {

                Student studentOne = new Student();

     

                string name = studentOne.Name;

                if(inputString!=null&&inputString.Length!=0)

               {

                     studentOne.Name = inputString;

                }

            }

    如果客户代码中有多处设置Name的地方,那每一处都需要修改,使用属性的 话只有修改属性的定义就可以了!这就是属性带来的便利!
    所以,使用属性是优于直接使用公共字段的!
    周雪峰
    • 已标记为答案 Jimt200010 2010年3月6日 12:39
    2010年3月5日 16:33
    版主
  • 你好!
         从C#3.0开始支持自动属性,可以不用写后台字段了,你只需要这样写就足够了:
         public string Name{get;set;}

    上面这行代码和如下代码等效:
         private string name;
         public string Name
         {
               get
               {
                      return name;
                }
                 set
                {
                      name=value;
                 }
          }
          所以,还是建议你使用属性,而不是公有字段!
    周雪峰
    • 已标记为答案 Jimt200010 2010年3月6日 12:39
    2010年3月6日 3:08
    版主

全部回复

  • 你好!

    区别在于第一种写法是字段,第二种是属性。

    知识改变命运,奋斗成就人生!
    2010年3月5日 13:13
    版主
  • 汗,这个我当然知道,具体呢,性能上或者功能上有啥区别?

    属性有啥优势,得这么劳神的去写那么多……还是说一些数据绑定的控件只认属性不任成员?

    看到有别人的代码,纯数据类,把上百个成员变量都写成了属性,有这个必要么 = =

    霸王
    2010年3月5日 13:32
  • 简单聊一下吧:
    数据类中的属性
    1,符合面向对象思想
    2,方便封装,而且属性可以是只写的和只读的
    3,避免定义过多的变量
    4,可以保护字段,字段做成保护型的,但属性可以对外开放
    5,CS程序里面属性甚至可以当做全局来使用

    总的来说好处还是很多的
    咯咯
    • 已标记为答案 Jimt200010 2010年3月6日 12:39
    2010年3月5日 15:24
  • 你好!
         一般在C#中,想“暴露”类中的某些数据给用户可以使用两种方式来实现,一种是使用公有字段,另外一种是使用属性来实现,下面我列举一些代码来比较 这两种实现:

    1,使用公有字段:

    public class Student

    {

         public string Name;

    }

    2,使用属性:

        public class Student
        {
            private string _name;
            public string Name
            {
                get
                {
                    return _name;
                }
                set
                {
                    _name = value;
                }
            }
        }

    客户代码都是 一样的:

            static void Main(string[] args)
            {
                Student studentOne = new Student();
                string name = studentOne.Name;
                studentOne.Name =inputString;
            }

    看上去似乎直接使用公有字段更简洁些,但是请大家留意这种情况,比如过一段时间需求更改为不允许对Name设置空值,使用公 有字段就需要修改客户代码了:

            static void Main(string[] args)
            {

                Student studentOne = new Student();

     

                string name = studentOne.Name;

                if(inputString!=null&&inputString.Length!=0)

               {

                     studentOne.Name = inputString;

                }

            }

    如果客户代码中有多处设置Name的地方,那每一处都需要修改,使用属性的 话只有修改属性的定义就可以了!这就是属性带来的便利!
    所以,使用属性是优于直接使用公共字段的!
    周雪峰
    • 已标记为答案 Jimt200010 2010年3月6日 12:39
    2010年3月5日 16:33
    版主
  • 属性的好处是不少,现在我就是用private的hashtable放内容,用属性来暴字段,很好用。

    这个问题是在看了别人写的程序之后才有的,纯数据类,全部是私有变量+公有读写属性来写,总有500多个吧,感觉很费时费力,写成公有变量的话能节省80%的时间,再这么做是不是值得?


    实际上,全部用公有变量,有特殊需要了就改成属性,也很简单。

    霸王
    2010年3月5日 19:05
  • 1 实体类一般可以使用建模工具或其它自定义工具来生成,不需要自己写。
    2 属性的特点在于封装,你可以在内部封装你的逻辑而使用者并不需要知道属性内部实现。 如周版主所说,这样看起来很好尤其是你写程序的早期,但在后期时可能会给你带来不必要的困扰。我们在设计程序或类的时候应该尽量符合面向对象的思想,方便以后的维护与升级。

    知识改变命运,奋斗成就人生!
    2010年3月6日 1:34
    版主
  • 你好!
         从C#3.0开始支持自动属性,可以不用写后台字段了,你只需要这样写就足够了:
         public string Name{get;set;}

    上面这行代码和如下代码等效:
         private string name;
         public string Name
         {
               get
               {
                      return name;
                }
                 set
                {
                      name=value;
                 }
          }
          所以,还是建议你使用属性,而不是公有字段!
    周雪峰
    • 已标记为答案 Jimt200010 2010年3月6日 12:39
    2010年3月6日 3:08
    版主
  • public string Name{get;set;} 之前就在用,是很好用。

    这个问题其实只是发发牢骚而已,觉得不应该花时间在这种无聊的事情上(在没有任何意义的情况下把字段写成属性,似乎只是为了满足一下构架要求,之后的三层构架更是惨不忍睹)……顺便普及一下属性知识也好……

    霸王
    2010年3月6日 12:39