C#中方法
C#中的方法
1、方法的定义
定义方法的语法形式如下:
其中:
①访问修饰符
所有类成员访问修饰符都可以使用,如果省略访问修饰符,默认是private。
②修饰符
在定义方法时修饰符包括virtual(虚拟的)、abstract(抽象的)、override(重写的)、static(静态的)、sealed(密封的)。
override是在类之间继承时使用的。
③返回值类型
用于在调用方法后得到返回结果,返回值可以是任意的数据类型,如果指定了返回值类型,必须使用return关键字返回一个与之类型匹配的值。如果没有指定返回值类型,必须使用void关键字表示没有返回值。
④方法名
对方法所实现功能的描述。方法名的命名是以Pascal命名法为规范的。
在方法中允许有0到多个参数,如果没有指定参数也要保留参数列表的小括号。参数的定义形式是“数据类型参数名”,如果使用多个参数,多个参数之间需要用逗号隔开。
2、get和set访问器
属性经常与字段连用,并提供了get访问器和set访问器,分别用于获取设置字段的值。
get访问器和set访问器的使用与方法非常类似,可以在操作字段时根据一些规则和条件来设置或获取字段的值。
此外,为了保证字段的安全性,还能选择省去get访问器或set访问器。
定义属性的语法形式如下:
3、构造方法
创建类的对象是使用“类名 对象名= new 类名()”的方式来实现的。
实际上,“类名()”的形式调用的是类的结构方法,也就是说构造方法的名字是与类的名称相同的。
构造方法的定义语法形式如下:
这里构造方法的访问修饰符通常是public类型的,这样在其他类中都可以创建该类的对象。
如果将访问修饰符设置成private类型的,则无法创建该类的对象。构造方法中的参数与其他方法一样,都是0到多个参数。
构造函数的作用:完成类的初始化工作。
实例:创建用户类user,并创建构造方法为用户类中的属性赋值。用户属性包括用户名、密码、手机号。
4、方法的重载
概念:在同一个作用域内,可以声明几个功能类似的同名函数。调用时根据不同的实参列表选择相应的函数。
重载的特点:函数名相同,参数列表不同。
参数列表不同 主要体现在参数个数或参数的数据类型不同。在调用重载的方法时系统是根据所传递参数的不同判断调用的是哪个方法。
如:创建一个名为SumUtils的类,在类中分别定义计算两个整数、两个小数、两个字符串类型的和。
5.方法的参数拓展
①实参和形参
方法中的参数分为实际参数和形式参数,实际参数称为实参,是在调用方法时传递的参数;形式参数被称为形参,是在方法定义中所写的参数。
如以下代码:
其中对于Add方法来说,
变量num1和num2是实际参数,称为实参;
a和b是形式参数,被称为形参。
②值传递和应用传递
C#中参数传递的方式有两种:值传递和引用传递
值传递:是指在调用方法时将实际参数复制一份传递到方法中,这样在方法中如果对参数进行修改,将不会影响到实际参数。
引用传递:是指在调用方法时实际参数和形式参数都指向同一个内存,这样在方法中如果对参数进行修改,将会影响到实际参数。
C#数据类型分为值类型和引用类型,那么在方法调用时,值类型一般都是以值传递的方式,引用类型都是以引用传递的方式。
如:以下代码
③ref关键字和out关键字
ref:当方法定义的时候在形参前面添加ref关键字表明是以引用的方式进行传参。(参数传递时也需要添加ref关键字)
使用场景:需要以引用的方式传递值类型参数。
如,修改上一个案例的ChangeValue方法:
运行后可以看到,对于值类型,在参数列表添加ref关键字之后,达到了引用传递参数的效果,在方法内部对形参的变动可以影响到实参。
拓展:引用类型不使用ref传参需要注意的地方:
①当引用类型不使用ref传参,在方法内部重新new一个对象后再进行操作,则该操作对实参没有影响。
②当引用类型使用ref传参,在方法内部重新new一个对象后再进行操作,则相当于将实参指向一个新的对象。
out:out关键字修饰的参数为输出参数。(参数传递时也需要添加out关键字)
使用场景:需要有多个返回值的情况。
例如以下代码:
6、方法的默认参数
C#中允许给方法设置默认参数,当调用方法时,如果没有传递相应的实参,那么系统就是使用默认参数代替
方法的默认参数只能设置在非默认参数的后面,且默认参数可以多个。
例子如下:
7、C#方法的递归调用
递归调用:是方法调用自身的一种形式。
例:使用递归实现计算所输入数的阶乘。
如:计算5的阶乘,则是5*4*3*2*1的结果。
8、C#部分类
在C#语言中提供了一个部分类,正如字面上的意思,它用于表示一个类中的一部分。关键字:partial。
一个类可以由多个部分类构成。
定义格式如下:
在这里,partial即为定义部分类的关键字。部分类主要用于当一个类中的内容较多时将类中的内容拆分到不同的定义中,并且部分类的名称必须相同。
注意:部分类中所有的类定义的需要添加partial关键字。
举例如下:
9、C#中的常用类
①Console类
Console类中包含控制台输入和输出的常用方法。
方法 | 描述 |
Write | 向控制台输出内容后不换行 |
WriteLine | 向控制台输出内容后换行 |
Read | 从控制台上读取一个字符 |
ReadLine | 从控制台上读取一行字符 |
举例如下:
②Math类
Math类主要用于一些与数学相关的计算,并提供了许多静态方法方便访问。
方法 | 描述 |
Abs | 去绝对值 |
Ceiling | 返回大于或等于指定的双精度浮点数的最小整数值 |
Floor | 返回小于或等于指定的双精度浮点数的最大整数值 |
Equals | 返回指定的对象实例是否相等 |
Max | 返回两个数中较大数的值 |
Min | 返回两个数中较小数的值 |
Sqrt | 返回指定数字的平方根 |
Round | 返回四舍五入后的值 |
举例如下:
③Random类
Random类是一个产生伪随机数字的类。
它的构造函数有两种:
前者是根据触发那刻的系统时间做为种子,来产出一个随机数字,后者可以自己设定触发的种子,一般都是用系统当前时间做为参数种子。
Random类中提供的Next、NextBytes以及NextDouble方法可以生成整数类型、byte数组类型以及双精度浮点型的随机数。
常用方法如下表所示:
方法 | 描述 |
Next() | 每次产生一个不同的随机正整数 |
Next(int max Value) | 产生一个比max Value小的正整数 |
Next(int min Value,int Max Value) | 产生一个minValue~maxValue的正整数,但不包含maxValue |
NextDouble() | 产生一个0.0~1.0的浮点数 |
NextBytes(byte[] buffer) | 用随机数填充指定字节数的数组 |
举例如下:
④DateTime类
DateTime类用于表示时间,所表示的范围是从0001年1月1日0点到9999年12月31日24点。
在DateTime类中提供了静态属性Now,用于获取当前的日期和时间。
常用方法如下表所示:
方法 | 描述 |
Date | 获取实例的日期部分 |
Day | 获取该实例所表示的日期是一个月的第几天 |
DayOfWeek | 获取该实例所表示的日期是一周的星期几 |
DayOfYear | 获取该实例所表示的日期是一年的第几天 |
Add(Timespan value) | 在指定的日期实例上添加时间间隔值value |
AddDays(double value) | 在指定的日期实例上添加指定天数value |
AddHours(double value) | 在指定的日期实例上添加指定的小时数value |
AddMinutes(double value) | 在指定的日期实例上添加指定的分钟数value |
AddSeconds(double value) | 在指定的日期实例上添加指定的秒数value |
AddMonths(int value) | 在指定的日期实例上添加指定的月份value |
AddYears(int value) | 在指定的日期实例添加指定的年份value |
举例如下: