有关类的成员方法有以下相关的知识点
1.成员方法的基本语法
2.重载
3.参数
4.修饰符
基本语法
这和函数的声明的格式有些相似,但多了一个修饰符。参数列表是可选的。如果没有返回类型要使用void关键字。
重载
重载是指在类中有两个或以上的成员方法(包括继承过来的)方法名相同,但参数类型或参数个数不同。这种特性是对多态机制的一种实现,实现了编译时的多态性。(还有一种运行时的多态性)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
成员方法的参数
成员方法的参数有两点要注意,一是参数本身的类型,二是对关键字ref,out,params用法的理解。
1.在不使用关键字的情况,也称为传值型参数。这种情况是为参数建立以个副本,把副本传到成员方法内部以供使用,需要注意的是值类型的参数和引用型的参数在结果上有些差别。方法里面对对参数的修改不会影响到值类型,但会影响到引用类型,因为引用型参数是把引用本身的副本传到方法里面去了,而不是把引用指向的对象的副本传到方法里面。下面给个例子,一看就能理解,说多了反而不好理解。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
结果是 100,10
2.ref关键字的使用,使用这个关键字后就叫按引用传递,或者传址型参数,使用这个关键字的特点是,不关参数是值类型还是引用类型,方法对参数的修改都会影响到传入参数本身。 需要注意的是不管是在方法的声明还是调用的时候,都要使用关键字ref,而其参数本身要在调用前进行初始化。(个人觉得ref对引用类型的参数意义不大)
3.out 和ref作用差不多,而其在编译时的处理方式也是一样的。由于这个原因,两个方法只是out 和 ref不同,不能算重载。他们的不同之处在于 ref 要求变量必须在传递之前进行初始化,out不用。out一般用于多个返回值的方法。
4.params让方发使用变长参数,也就是可以使用任意个数的参数,但必须遵循如下规则,在方法声明中params之后不能跟其它参数,一个方法中只能有一个params,使用params的参数必需是数组类型。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
这个例子是Hunts.C我觉得很不错,就借来用用。
修饰符
园子里面写修饰符的很多,想推荐两个,一个是Athrun的C#的修饰符,写的很全,还有一个就是这张来自吴有鋆的图
这个东西很多也很杂,而且用的地方也不经相同,我想在后面的学习中逐步介绍,一次说多也记不住。