在C#语言中创建的任何项目都有类的存在,通过类能很好地体现面向对象语言中封装、继承、多态的特性。
- 类的访问修饰符:用于设定对类的访问限制,包括 public、internal 或者不写,用 internal 或者不写时代表只能在当前项目中访问类;public 则代表可以在任何项目中访问 类。
- 修饰符:修饰符是对类本身特点的描述,包括 abstract、sealed 和 static。abstract 是抽象的意思,使用它修饰符的类不能被实例化;sealed修饰的类是密封类,不能 被继承;static修饰的类是静态类,不能被实例化。
- 类名:类名用于描述类的功能,因此在定义类名时最好是具有实际意义,这样方便用户理解 类中描述的内容。在同一个命名空间下类名必须是唯一的。
类的成员:在类中能定义的元素,主要包括字段、属性、方法。
C#访问修饰符
1、成员的访问修饰符
类中的成员包括字段、属性、方法。每个类成员在定义时需要指定访问修饰符、修饰符。 类的访问修饰符主要有两个,即 internal 和 public,如果省略了访问修饰符,即为 internal。
类中成员的访问修饰符有 4 个,具体用法如下。
- public
成员可以被任何代码访问。
- private
成员仅能被同一个类中的代码访问,如果在类成员前未使用任何访问修饰 符,则默认为 private。
- internal
成员仅能被同一个项目的代码访问。
- protected
成员只能由类或派生类是在继承中涉及的,将在后面详细介绍。
2、成员的修饰符
在修饰字段时通常用两个修饰符,即readonly(只读)、static (静态的)和const
(常 量),三者不能修饰同一个成员。
使用readonly修饰字段意味着只能读取该字段的值而不能给字段赋值。
使用 static 修饰的字段是静态字段,可以直接通过类名访问该字段。
3、成员的默认值
字段在类中定义完成后,在类加载时,会自动为字段赋值,不同数据类型的字段默认值不 同, 如下表所示。
C#中的方法
- 方法的定义
- 访问修饰符 所有类成员访问修饰符都可以使用,如果省略访问修饰符,默认是 private。
- 修饰符 在定义方法时修饰符包括 virtual(虚拟的)、abstract(抽象的)、override(重写 的)、static(静态的)、sealed(密封的)。 override 是在类之间继承时使用的。
- 返回值类型 用于在调用方法后得到返回结果,返回值可以是任意的数据类型,如果指定了返回值类型, 必须使用 return 关键字返回一个与之类型匹配的值。如果没有指定返回值类型,必须使用 void 关键字表示没有返回值。
- 方法名 对方法所实现功能的描述。方法名的命名是以 Pascal 命名法为规范的。
- 参数列表 在方法中允许有 0 到多个参数,如果没有指定参数也要保留参数列表的小括号。参数的定义形式是“数据类型参数名”,如果使用多个参数,多个参数之间需要用逗号隔开
- get和set访问器
属性经常与字段连用,并提供了get访问器和 set 访问器,分别用于获取或设置字段的值。
get 访问器和 set访问器的使用与方法非常类似,可以在操作字段时根据一些规则和条件来 设置或获取字段的值。
此外,为了保证字段的安全性,还能选择省去get访问器或 set 访问器。
- 构造方法
创建类的对象是使用“类名 对象名 = new 类名()”的方式来实现的。
实际上,“类名()”的形式调用的是类的构造方法,也就是说构造方法的名字是与类的名称 相同的。
构造方法的定义语法形式如下:
这里构造方法的访问修饰符通常是public类型的,这样在其他类中都可以创建该类的对象。如果将访问修饰符设置成private类型的,则无法创建该类型的对象。构造方法中的参数与其他方法一样,都是0到多个参数。
构造函数的作用:
完成类的初始化工作。
4、方法的重载
概念:
在同一个作用域内,可以声明几个功能类似的同名函数。调用时根据不同的实参列表选择相应的函数。
重载的特点:
函数名相同,参数列表不同。
参数列表不同主要体现在参数个数或参数的数据类型不同。在调用重载的方法时系统是根据所传递参数的不同判断调用的是哪个方法。
5、方法的参数拓展
1)实参和形参
方法中的参数分为实际参数和形式参数,实际参数被称为实参,是在调用方法时传递的参数;形式参数被称为形参,是在方法定义中所写的参数。
2)值传递和引用传递
C#中参数传递的方法有两种:值传递和引用传递
值传递:
值传递是指在调用方法时将实际参数复制一份传递到方法中,这样在方法中如果对参数进行修改,将不会影响到实际参数。
对于值类型的数据,如果没有特殊说明,那么在方法调用时按照值传递的方式进行参数的传递。
引用传递:
引用传递是指在调用方法时实际参数和形式参数都指向同一个内存,这样在方法中如果对参 数进行修改,将会影响到实际参数。
前面我们讲到C#数据类型分为值类型和引用类型。 那么在方法调用时,值类型一般都是以值传递的方式,引用类型都是以引用传递的方式。
3)ref关键字和out关键
Ref:当方法定义的时候在形参前面添加ref关键字表明是以引用的方式进行传参。(参数传递 时也需要添加ref关键字) 使用场景:需要以引用的方式传递值类型参数。
拓展: 引用类型使用ref传参和不适用ref传参需要注意的地方:
a. 当引用类型不使用ref传参,在方法内部重新new一个对象后再进行操作,则该操作对实 参没有影响。
b. 当引用类型使用ref传参,在方法内部重新new一个对象后再进行操作,则相当于将实参 指向一个新的对象。
Out:out关键字修饰的参数为输出参数。(参数传递时也需要添加out关键字) 使用场景:需要有多个返回值的情况。
C#中的常用类
1)Console类
Console类中包含控制台输入和输出的常用方法。
2)Math类
Math类主要用于一些与数字相关的计算,并提供了很多静态方法方便访问。
3)Random类
Random类是一个产生伪随机数字的类。
它的构造函数有两种:
1 Randon random = New Random();
2 Randon random = New Random(Int32);
前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的 种子,一般都是用系统当前时间做为参数种子。
Random 类中提供的 Next、NextBytes 以及 NextDouble 方法可以生成整数类型、byte 数组类型以及双精度浮点型的随机数。
常用方法如下表所示:
4)DateTime类
DataTime类用于表示时间,所表示的范围是从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 |