在面向东西编程(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; }
}
}