属性成员
属性是字段的一种自然扩展,是一个与类或对象相关联的命名。与字段不同的是,属性不表示存储位置,属性拥有访问器,访问器定义了读取或者写入属性值时必须执行的代码。通过属性的get{}访问器和set{}访问器来实现对类中私有字段的读/写操作。为了类的封装性,一般是把描述类的特征的字段定义为private,把属性设置为public来操作私有的字段。
下面是关于类的范例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace String
{
class Phone
{
private string phoneNumber;//定义一个私有字段成员用于表示电话号码
public const string PhoneType = "GSM";//声明常量,隐式静态
public static string emergency_Call = "119";
public string PhoneNumber//[访问修饰符]数据类型 属性名(定义属性成员)
{
get { return phoneNumber; }//get访问器,得到其值
set { phoneNumber = value; }//set访问器,设置值
}
public void Dial()
{
Console.WriteLine("您正在拨打电话!");
}
public void Dial(string number)
{
Console.WriteLine("您正在拨打:" + number);
}
public static void EmergencyCall()
{
Console.WriteLine("您正在拨打急救电话:119!");
}
}
class Program
{
static void Main(string[] args)
{
Phone.EmergencyCall();
Console.WriteLine(Phone.emergency_Call);
Phone objPhone = new Phone();
Console.WriteLine("输入电话号码:");
objPhone.PhoneNumber = Console.ReadLine();
Console.WriteLine("电话号码是:" + objPhone.PhoneNumber);
objPhone.Dial();
objPhone.Dial(objPhone.PhoneNumber);
}
}
}
下文为引用:
c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性。上述代码中如果去掉set部分,则外界只能读取phoneNumber的值,如果去掉get部分,则只能给phoneNumber赋值。这样就可以控制外界对私有属性phoneNumber的访问权限了,这种写法是C#的一个特性。
当然你也可以通过自己创建函数来对phoneNumber进行取值和赋值,但这样就显得比较麻烦了。
属性与普通变量不同就在于, 普通变量就是放在屋子里的东西, 是什么样明明白白. 而属性则是在屋子的门口放了个守门人, 你拿东西放东西要经过他.
这个守门人就是属性访问器, 拿东西就是 get, 放东西就是 set. 怎么拿怎么放是它说了算, 虽然你觉得好像就是直接拿直接放差不多.
GET SET 就是对外的接口 ,一般在实例中访问成员数据需要这个成员数据的访问方式为PUBLIC ,现在C#很高级了,GET 就是获取,SET 就是设置,但是它提供了跟好的收缩性,对GET 和SET 可以单独设置访问权限 比如你对某个成员数据只能读取或者只写,或者只有派生类可以访问等。。。 相对以前来说,没有属性访问器,需要通过函数来调用私有成员数据,属性提供了高效的访问模式和简单的书写。
就是为了安全啊~~
字段是你具体要操作的数据所以他的值不能出错,可是你又不能避免用户犯错~~
为了安全就用属性来给字段赋值,因为 在set中你可以对数据的安全进行验证,
get就更简单了验证完数据了就要把值给了字段所以要get
set的中文意思是“设置”;
get的中文意思是“获得”;
补充:
get 和 set 会在相应的时候自动调用
主要是为了隐藏程序内的数据结构时用
get是获取该属性的值,
set设置该属性的值。
在用set时有一个特殊的变量value
就是设置属性时的值
value 隐式参数,用于设置访问器以及添加或移除事件处理程序。
对类的属性进行 设置
比如用类名.属性=“”赋值 set作用
变量=类名.属性 取值 get 作用