c# 学习笔记之十三 property之我见

property是c#中的一个名词。与其认为是一个专有语法,还不如认为是一系列语法的组合。property专属的关键字就只有value。其他的性质实现都是用其他的方法的组合。property通过对一系列方法的灵活组合应用,能够间接地对私有的成员变量进行赋值操作和得到值。因为是间接地,私有变量的隐私性也是得到了保护。在下面这个例子中

定义一个Teacher类。老师的性别是隐私的,名头也是隐私的。但是,可以定义一个property,用set和get方法间接地外部操作。注意这个专有的关键词value,它代表在外部赋值时等号右边的值,也就是输入的值。在property的set内部,是可以对value进行操作的。set方法是非常灵活的,可以有多种操作。

namespace PropertyQuest
{
class Teacher      {
    string sex;//性别是私有的
    string title;//头衔是私有的.假如头衔就是女老师,男老师
    public string  Title{ 
        set{
          sex = value.Split(' ')[0];//value是你在主程中,对Title赋值的时候,等号右边传递的值.
                                      //字符串的split()方法是以一个或若干个字符为分隔符,分隔后的子串以字符串数组形式返回.这和Python蛮像的.
                                      //[0]就是要得到第一个字符串.因为我要输入的Title是"female teacher"或者"male teacher",因此
                                      //我以空格分割后,第一个字符串就是性别
          title = value;//上一步操作sex,这一步操作title.说明set方法是很灵活的,一次可以设置多个成员变量
        get {
          return title;//间接得到title,title在set中已经设置
             }
                         }
    public string Sex {
            get{
              return sex;//间接得到sex的值.在上一个property中,sex被设置,在
                        //这个property中,单独使用get,得到sex.很灵活的
                }
                      }
                   }
                   
class Program   {
    public static void Main(string[] args)
        {
        Teacher t = new Teacher();
        t.Title = "female teacher";//等号右边的就是value的值,赋给property Title后,在Title内部是会被操作的.
                                    //间接地再赋给私有的成员变量.私有成员变量在当前类是不可见的,
                                    //但是在Teacher类中是可见,因此可以被其他代码块使用,比如Title{}中的set{}.
        Console.WriteLine(t.Sex);//通过property Sex间接得到私有成员变量sex的值
        Console.WriteLine(t.Title);//通过property Title间接得到私有成员变量title的值
        Console.Write("Press any key to continue . . . ");
        Console.ReadKey(true);
        }
                 }
}


 property还有一个用法,比较接近property这个单词的本意。如果 有一项本来是对象的性质或者说属性,但是要得到它还是要用一个函数。例如,知道一个矩形的长和宽,想知道它的面积。本来一个矩形的面积就是它的一个属性,但是在传统方法下,却要用一个函数得到,感觉别扭。

using System;
class Rectangle {
    public float length;
    public float width;
    public float Area()
        {
        return length*width;
         }
                  }

如果想得到一个Rectangle r的面积,明明是个属性嘛,却要用一个函数,r.Area().

但是用property方法,这个过程就自然地多。

class Rectangle              {
	public float length;
	public float width;
	public float Area{
		get{
		  return length*width;
	            }
			}
	                       }
可以直接得到Rectangle  r的面积属性,用r.Area。Area 就是矩形的属性嘛,那我就用对象名加属性名,多么自然。

完整程序如下:

using System;

class Rectangle {
	public float length;
	public float width;
	public float Area{
		get{
		  return length*width;
			}
					  }
	             }
namespace ObjectInherit
{
class Program{
	public static void Main(string[] args)
		{
		Rectangle r = new Rectangle();
		r.length = 100;
		r.width = 50;
		Console.WriteLine(r.Area);
		Console.Write("Press any key to continue . . . ");
		Console.ReadKey(true);
		}
              }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章