您的位置:首页 > 其它

面向对象之属性的理解

2015-04-24 21:10 155 查看
1.定义一个Person类中,我们使用公共的字段进行赋值,如下所示:

Class Person
{
public string _name;
public int _age;
public char _gerder;
public void Method()
{
Console.Writeline("打印姓名{0},打印年龄{1},打印性别{2}",this._name,this._age,this._gender);
}
}


上述的字段在任何类中都可以访问。因此,在Main方法中有:

Person p1=new Person();
p1._name="Grenn";
p1._age=12;
p1._gender='男';
p1.Method();
Console.ReadKey();


其输出的的结果为:打印姓名Grenn,打印年龄12,打印性别男。

2.当然,为什么要引入字段,是因为此时的字段是公共的,任何类都可以访问此字段。因此,我们有时必须保证字段的数据不被其他的类访问,因此,属性就提出来了。

其实,属性他的作用是判断字段,其处理的结果也最终归结到字段的方法;它有两个方法get和set方法;

其反编译的结果为

//get本质方法,其实就是取出一个字段。
public string get_Name()
{
return this._name;
}

//set的本质方法,其实就是赋值从main方法中对象的值。

public void set_Name(string value)
{
this._name = value;
}


所以,我们很容易看出属性的作用就是保护字段,不要字段直接和对象中的数据进行交互。让属性干这些事。

因此,当我们用set方法时用我们调用set{ }方法,取值的时候调用get{ }的方法;

如下是属性的用法:

Class Person
{
private string _name;
private int _age;
private char _gender;
public string Name
{
get{return _name;}
set{_name=value;}
}
pulbic int Age
{

get{return _age; }
set{
if(value>100||value<0)//value是main方法中所传来的值,说得透彻一点,就是p1.Age=-12;其实就是value值
{
_age=0;
}
_age=value;
}

public char Gender
{
get
{
if(_gender!='男'&& _gender!='女')
{
return _gender='男';
}
return _gender;
}
set{_gender=value;}

public void Method()
{
Console.WriteLine("打印姓名{0},打印年龄{1},打印性别{2}",this.Name,this.Age,this.Gender);//this为当前对象所指的数据;
}
}


在Main方法中:

Person p2=new Person();
p2.Name="Green";
p2.Age=-12;//赋值vlaue=-12;
p2.Gender='未知';
p2.Method();
Console.ReadKey();


打印的结果为:

打印姓名Green,打印年龄0,打印性别男。

其实,再详细点就是p2.Name=”Green”是将”Green“传给Value;并传至set方法中判断。而this.Name其实就是将字段_name=value值传递给get方法来判断。

在整个过程中,属性是没有值的,打印的是字段的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: