c#属性是什么
首先C#属性是不存储任何的实值,它是域的扩展(即我们通常说的成员变量等)
它配合C#中的域(字段)使用,使之构造一个安全的应用程序,为什么说通过属性来替代域会提高应用程序的安全呢?
原因就在于C#属性通过访问器(Accessors)用进行数据访问.所以C#的属性可以设置为只读或只写.
而字段却没有这样的功能(只可设置只读).我们都知道在程序中有时我们是不允许用户修改一些属性的,比如地球是圆的
原则上我们是不能修改此属性.那么我们就可以通过一个属性来实现这样的功能.让它设置为只读属性.
前面我们说到属性是字段的扩展,我们都知道如果要在类外部访问字段,就要公开(Public)这个成员字段
但是如果我们真的这样做了,那这个成员字段的就可以被任意访问(包括修改,读取).那怎么办呢?
用一个属性就可以解决这个问题.
C#属性是通过Get(读取)、Set(设置)来访问属性的.
public class Test
{
public Test()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//为了说明问题这里我们用中文
public string 地球的形状;
}
在上面的例子里"地球的形状"这个字段就可以任意的访问,不受任何的束缚.但是我们都知道地球是圆的,是不允许修改的一个特性,那怎么办呢?用一个属性就可以轻松的解决这个问题.
public class Test
{
public Test()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//为了说明问题这里我们用中文
private string 地球的形状="圆";//私有的成员变量,它对于外部是不可见的.
public string 地球形状
{
get
{
return 地球的形状;//这里将私有成员变量地球的形状返回给"地球的形状"
}
}
}
这里我们只可以读取属性"地球形状",而不可以写,如果强制写编译器就会提示出错.这样我们就可以通过类来访问属性.
Test MyTt=new Test();//实例化类
string MyTemp=MyTt.地球形状;//读取类的属性
下面我们说一下写的应用.
public class Test
{
public Test()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//为了说明问题这里我们用中文
private string 你的名字;//私有的成员变量,它对于外部是不可见的.
public string 名字
{
get
{
return 你的名字;//这里将私有成员变量"你的名字"的形状返回给"名字"
}
set
{
你的名字=value;//这里的value将等于"名字这个属性值"
}
}
}
这样我们就可以对属性读取和写了.
Test MyTt=new Test();//实例化类
MyTt.名字="沉健"//设置属性
String MyTemp=MyTt.名字;读取属性值
通过上面的例子我们可以看出属性只不过是做了一个中介的角色而已,真正工作的还是字段(域),但这样做可以更面向对象
写出更安全的应用程序.
首先C#属性是不存储任何的实值,它是域的扩展(即我们通常说的成员变量等)
它配合C#中的域(字段)使用,使之构造一个安全的应用程序,为什么说通过属性来替代域会提高应用程序的安全呢?
原因就在于C#属性通过访问器(Accessors)用进行数据访问.所以C#的属性可以设置为只读或只写.
而字段却没有这样的功能(只可设置只读).我们都知道在程序中有时我们是不允许用户修改一些属性的,比如地球是圆的
原则上我们是不能修改此属性.那么我们就可以通过一个属性来实现这样的功能.让它设置为只读属性.
前面我们说到属性是字段的扩展,我们都知道如果要在类外部访问字段,就要公开(Public)这个成员字段
但是如果我们真的这样做了,那这个成员字段的就可以被任意访问(包括修改,读取).那怎么办呢?
用一个属性就可以解决这个问题.
C#属性是通过Get(读取)、Set(设置)来访问属性的.
public class Test
{
public Test()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//为了说明问题这里我们用中文
public string 地球的形状;
}
在上面的例子里"地球的形状"这个字段就可以任意的访问,不受任何的束缚.但是我们都知道地球是圆的,是不允许修改的一个特性,那怎么办呢?用一个属性就可以轻松的解决这个问题.
public class Test
{
public Test()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//为了说明问题这里我们用中文
private string 地球的形状="圆";//私有的成员变量,它对于外部是不可见的.
public string 地球形状
{
get
{
return 地球的形状;//这里将私有成员变量地球的形状返回给"地球的形状"
}
}
}
这里我们只可以读取属性"地球形状",而不可以写,如果强制写编译器就会提示出错.这样我们就可以通过类来访问属性.
Test MyTt=new Test();//实例化类
string MyTemp=MyTt.地球形状;//读取类的属性
下面我们说一下写的应用.
public class Test
{
public Test()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//为了说明问题这里我们用中文
private string 你的名字;//私有的成员变量,它对于外部是不可见的.
public string 名字
{
get
{
return 你的名字;//这里将私有成员变量"你的名字"的形状返回给"名字"
}
set
{
你的名字=value;//这里的value将等于"名字这个属性值"
}
}
}
这样我们就可以对属性读取和写了.
Test MyTt=new Test();//实例化类
MyTt.名字="沉健"//设置属性
String MyTemp=MyTt.名字;读取属性值
通过上面的例子我们可以看出属性只不过是做了一个中介的角色而已,真正工作的还是字段(域),但这样做可以更面向对象
写出更安全的应用程序.