(教学思路 C#之类二)类成员:属性
2008-12-11 22:46
501 查看
属性
上节课我把属性形容成是一个进入房间的窗户或通道,关闭着的房间就是封装好的类,那么属性用代码要如何解释呢?其实这个问题,在我刚学习属性时也是很不理解,如果需要对字段的值进行判断,就写我上面的两段代码(17-38行)不就可以了吗?但是随着我们学习的不断深入,属性是必须掌握的一个知识点,现在同学们只需要会定义属性,同时会访问属性就可以了,日后深入学习(如windowsform)时,我们就理解属性的用法和好处了。在我们这个例子中属性机制就要做到如同守门员一样,限制住非海、陆、空的三种军种,下面把按照刚才军种的例子我来单独写一段代码,同时使用属性,在看代码前,我们先来看一下如何定义一个属性,它的基本语法是:
ptype pname
{
get{//取字段数据程序代码}
set{//设定字段数据程序代码}
}
其中ptype为属性类型,pname为属性的名称,set和get的相关程序代码可以让我们设置私有字段的访问控制,set会接受外部传入的值,并自动地以名称为value的变量存储这个值。因此在set程序区块,你必须将value这个变量指定给对应的字段,这相对地也提供了一个缓冲的空间,让我们能够在区块内编写适当的程序代码,避免不适当的字段值设定操作,比如我上一篇的例子“男性”不是军种的一种,我们在调用军种这个字段时,赋值除了海陆空三种值后,要出现报错的提示,只有对特殊字段做出限制时,你编写的程序才更加合理。在get程序区快中,必须使用return关键字,将其对应的字段值返回给引用此属性的程序代码,同样我们也可以将运算程序代码写在这个区块中,以判断是否返回指定的字段值。比如:在网站中每个人注册的都是真实的年龄中定义的,我们可以做一个假象,让所以人的年龄在显示的时候都比实际年龄大3岁,这就通过get区块中return出虚假的年龄。下面我们来看一段声明属性的代码:
class Ren
2 class Ren
2 class Program
30class Armyman
2 class Program
55 }
运行结果为
不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军
赋值后的军种为:
战略空军将使战争形态向可控战争转变。
赋值后的军种为:空军
请按任意键继续. . .
对比我上节课用的普通方法即(被我注释掉的)代码如下:
class Armyman
2 class Program
55 }
运行结果如下:
男性不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军
男性
请按任意键继续. . .
从结果来看,很明显,如果用上面的例子,男性这个军种如果不采用属性,而是用被我注释掉的方法(第3行)一定会被赋值给Armytype字段的,而使用了属性时,“男性”因为进入了default代码快如46-48行,我们没有加入Armytype=value;这句代码,使得无法对字段Armytype赋值,这时代码第65行,Armytype1的值仍然为空,而不是“男性”,属性的优点就体现在这,所以我在前面的课程中曾说属性是保护字段的。
本节课我们就讲到这,下节课我们来学习方法的参数类型.
上节课我把属性形容成是一个进入房间的窗户或通道,关闭着的房间就是封装好的类,那么属性用代码要如何解释呢?其实这个问题,在我刚学习属性时也是很不理解,如果需要对字段的值进行判断,就写我上面的两段代码(17-38行)不就可以了吗?但是随着我们学习的不断深入,属性是必须掌握的一个知识点,现在同学们只需要会定义属性,同时会访问属性就可以了,日后深入学习(如windowsform)时,我们就理解属性的用法和好处了。在我们这个例子中属性机制就要做到如同守门员一样,限制住非海、陆、空的三种军种,下面把按照刚才军种的例子我来单独写一段代码,同时使用属性,在看代码前,我们先来看一下如何定义一个属性,它的基本语法是:
ptype pname
{
get{//取字段数据程序代码}
set{//设定字段数据程序代码}
}
其中ptype为属性类型,pname为属性的名称,set和get的相关程序代码可以让我们设置私有字段的访问控制,set会接受外部传入的值,并自动地以名称为value的变量存储这个值。因此在set程序区块,你必须将value这个变量指定给对应的字段,这相对地也提供了一个缓冲的空间,让我们能够在区块内编写适当的程序代码,避免不适当的字段值设定操作,比如我上一篇的例子“男性”不是军种的一种,我们在调用军种这个字段时,赋值除了海陆空三种值后,要出现报错的提示,只有对特殊字段做出限制时,你编写的程序才更加合理。在get程序区快中,必须使用return关键字,将其对应的字段值返回给引用此属性的程序代码,同样我们也可以将运算程序代码写在这个区块中,以判断是否返回指定的字段值。比如:在网站中每个人注册的都是真实的年龄中定义的,我们可以做一个假象,让所以人的年龄在显示的时候都比实际年龄大3岁,这就通过get区块中return出虚假的年龄。下面我们来看一段声明属性的代码:
class Ren
2 class Ren
2 class Program
30class Armyman
2 class Program
55 }
运行结果为
不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军
赋值后的军种为:
战略空军将使战争形态向可控战争转变。
赋值后的军种为:空军
请按任意键继续. . .
对比我上节课用的普通方法即(被我注释掉的)代码如下:
class Armyman
2 class Program
55 }
运行结果如下:
男性不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军
男性
请按任意键继续. . .
从结果来看,很明显,如果用上面的例子,男性这个军种如果不采用属性,而是用被我注释掉的方法(第3行)一定会被赋值给Armytype字段的,而使用了属性时,“男性”因为进入了default代码快如46-48行,我们没有加入Armytype=value;这句代码,使得无法对字段Armytype赋值,这时代码第65行,Armytype1的值仍然为空,而不是“男性”,属性的优点就体现在这,所以我在前面的课程中曾说属性是保护字段的。
本节课我们就讲到这,下节课我们来学习方法的参数类型.
相关文章推荐
- (教学思路 C#之类二)类成员:属性
- (教学思路 C#之类二)类成员:属性
- (教学思路 C#之类七)类和构造方法的继承(base关键字、Object类)
- 教学思路 C#之类四)构造方法(静态构造方法、this、方法重载)、析构方法(修改新增)
- (教学思路 C#之类三)方法参数类型(ref、out、parmas)
- (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
- (教学思路 C#之类三)方法参数类型(ref、out、parmas)
- (教学思路 C#之类三)方法参数类型(ref、out、parmas)
- (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
- (教学思路 C#之类六)索引器
- (教学思路 C#之类四)构造方法(静态构造方法、this、方法重载)、析构方法(修改新增)
- (教学思路 C#之类四)构造方法(静态构造方法、this、方法重载)、析构方法(修改新增)
- (教学思路 C#之类六)索引器
- (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
- (教学思路 C#之类四)构造方法(静态构造方法、this、方法重载)、析构方法(修改新增)
- (教学思路 C#数组二)数组的属性、foreach遍历、交错数组与矩形数组的区别
- (教学思路 C#之类六)索引器
- (教学思路 C#之类七)类和构造方法的继承(base关键字、Object类)
- (教学思路 C#之类九)抽象类和接口
- (教学思路 C#之类八)多态性:base、new、override、virtual