那么相应变量就是“只写”的

时间:2022-05-25 07:36:58

在面向东西编程(OOP)中,是不允许外界直接对类的成员变量直接访谒的,既然不能访谒,那界说这些成员变量还有什么意义呢?所以C#中就要用set和get要领来访谒私有成员变量,它们相当于外界访谒东西的一个通道,一个“接口”。先来看一段代码:

class Employee
  {
        private string name;
        private byte age;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public byte Age
        {
            get { return age; }
            set { age = value; }
        }
  }

  代码中界说了两个私有变量name和age,,当我们不想让外界随意访谒该私有变量时,可以使用属性来访谒,语法为:

public <返回类型(要与被访谒变量的类型不异)> <属性名(不能与被访谒变量同名)>
  {
        get{ return <被访谒变量>;}
        set{ <被访谒变量> = value;}
  }

  当我们使用属性来访谒私有成员变量时就会挪用里面的get要领,当我们要改削该变量时就会挪用set要领,固然在界说的时候可以只界说一个get要领或只界说一个set要领。如果只界说get要领,那么这个相应变量就是“只读”的;如果只界说set要领,那么相应变量就是“只写”的。

  既然外界可以通过set和get访谒类内私有成员,那为什么不直接把它界说成共有,直接供外界访谒呢?拿上面的Employee类来说明:

class Employee
    {
        private string name;
        private byte age;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        //****改削后****↓↓↓↓↓↓↓↓
        public byte Age
        {
            get { return age; }  
            set
            {                
                if (value > 10 && value<=100)   //一般在公司雇员的春秋都在10到100岁之间
                age = value;   
            }
        }
        //****改削后****↑↑↑↑↑↑↑↑
    }

上例中,set就像一位门卫大叔一样,只有好人才华进来。可以通过属性来控制对员变量的读写,防备对成员变量的犯警赋值等。

再举个小例子,以下是个温度计的类:

class Thermometer
    {
        private double temperature;
        public Thermometer(double temperature)  //结构函数
        {
            this.temperature = temperature;
        }
        public double Temperature
        {
            get { return temperature; }
            set { temperature = value; }
        }
    }