3.7 属性

  在3.2.3类成员一节,简单的讲解了属性作为类成员的使用方法。属性是为了把对象的实现细节与使用者所能看见的元素隔离,同时通过定义类成员的作用域,从而控制关于对象数据的访问。虽然在前面的章节中,可以通过private、public等关键字限制类成员的访问权限,但是通过属性可以管理其他对象对类中类成员的访问。属性是一种类成员,提供了对对象或类中元素的访问方法。

3.7.1 语法
  定义属性的语法通常使用public、private来修饰访问权限,同样包括类型、属性名、关键字以及由“{”“}”大括号包含的代码段,示例代码如下所示。
+展开
-C#
        public string Str { getset; }//编写属性

  get语句和set语句成为访问器。在Visual Studio 2005中,get访问器的返回类型必须与属性类型相同,或者可以隐式的转换为属性类型。set访问器等价于具有一个叫value的隐式参数的方法。而在Visual Studio 2008中,可以使用更加简单的代码,如上述代码所示。

1.类成员实现
  通过设计类成员,可以实现属性的原理,也能够更加方便的理解属性的实现,示例代码如下所示。
+展开
-C#
    class Car//编写类
    {
        private string _str;//私有的类成员,字段
        public string SetStr(string str)//共有的方法,设置类成员
        {
            _str = str;//设置相应属性
            return _str;//返回相应属性
        }
        public string GetStr(string str)//共有的方法,返回私有类成员值
        {
            return _str;//返回相应属性
        }
    }

  上述代码创建了一个汽车类,用来描述一辆汽车,同时也创建了一个私有的类成员_str,用来描述车的属性。当设置为私有时,对象不能通过“.”号来访问_str,于是需要通过类成员中的方法来实现访问。SetStr是一个为_str赋值的一个方法,代码非常简单,而GetStr是获取_str值的方法,而这两个方法都公共方法,可以通过外部引用。

2.属性的使用方法
  从上述代码中可以看出,属性的使用无非就是为私有的变量的访问权限做了调整,通过属性来访问用户本不应该访问的私有变量。可以将上述类更改,使代码更加简洁和可读,示例代码如下所示。
+展开
-C#
    class Car//编写类
    {
        public string str { getset; } //使用属性声明字符串变量
    }
    class Program//应用程序主类
    {
        static void Main(string[] args)//应用程序入口方法
        {
            Car myCar = new Car();//创建新变量
            myCar.str = "Car";//访问类成员并赋值
        }
    }

  上述代码使用了属性,让代码更加可读。可以将属性的方法对用户隐藏,提高了代码的安全性,也增加了封装的特性。

注意:在2.0中,get需要返回一个值,并且与get访问器的返回类型必须相同。而set访问器中,需要写变量名称的值等于value的隐式参数方法,但是在3.5中去掉了这样的声明方式,直接写get;set;即可实现。

3.7.2 只读/只写属性
  只读属性和只写属性是C#属性中的一个特殊属性,只读属性和只写属性都只包含相应的访问器用于不同的属性的访问。只读属性和只写属性在一定程度上保证了属性的安全性和类的密封性,如果在应用程序开发中为了保证某个字段的安全性或可访问性,可以使用只读或只写属性。

1.只读属性
  在属性的声明中,允许声明只包含一个get访问器的属性。在这种情况下,声明的类成员只允许读,并在程序上下文中使用,示例代码如下所示。
+展开
-C#
    class Car//编写类
    {
        public string str { get {return "this is a str";}}//只读属性
    }

  上述代码中只使用了get访问器,在使用中,类成员变量str只能读而不能改。

2.只写属性
  同样,在属性的声明中,同样允许声明只包含一个set访问器的属性。在这种情况下,声明的类成员只允许写,但是却不能读,在程序的上下文中不允许使用,示例代码如下所示。
+展开
-C#
    class Car//编写类
    {
        private string _str;//声明私有变量
        public string str { set { _str = value; } }//只写属性
    }

上述代码中只使用了set访问器,在使用中,类成员变量str只能写而不能读。

加支付宝好友偷能量挖...


评论(0)网络
阅读(116)喜欢(0)Asp.Net/C#/WCF