摘要:本文是 C# 语言学习笔记,涵盖第四至第六节课的核心内容。第四节课介绍了二维数组与交错数组的定义和用法,以及方法(函数)的定义、访问修饰符与代码复用;第五节课讲解了构造方法、方法重载、this 关键字、static 修饰符和属性封装;第六节课介绍了继承的基本概念、单根性与传递性,以及方法重写的规则。
第四节课 C# 语言
二维数组其实就是数组类型的升级版
数据类型[,] 数组名 = new 数据类型[n,m];
int[,] matrix = new int[3, 4]
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
他表示有三列,四行
还有一种数组叫做矩形二维数组和二维数组的区别就是有空值
数据类型[][] 数组名 = new int[数组元素个数][];
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[2] { 1, 2 };
jaggedArray[1] = new int[4] { 3, 4, 5, 6 };
jaggedArray[2] = new int[3] { 7, 8, 9 };
3 代表有三列但是不知道行里有几个数
然后学习了我认为比较重要的 C# 的方法
就比如之前学的 if for 等都是用在方法里面的
[public] static 返回值类型 方法名([参数列表])
{
方法体;
}
public: 访问修饰符,公开的,公共的,哪里都可以访问。
static: 静态的(这个上课的时候没有细讲,大概意思是静态的类型只能用静态的意思)
方法可以提高代码的复用
void 也是返回值类型但是他不用返回
方法可以反复调用提高代码的复用
第五节课 C# 构造方法
主要是缩减我们代码的量
然后就是方法的重载大概意思是在原来的基础上重写复写一个新的方法
构造方法的作用就是给初始化对象赋值
特点是构造函数没有返回值,连 void 也不能写,构造函数的名称跟类名一样,没有具体的返回值
如果存在有参的构造方法就不能去调用无参构造了
所以创建一个类的时候,把无参和有参都写上。
无参构造
public Student()
{
Console.WriteLine("我是无参构造方法。。。");
}
有参构造
public Student(string name, int age, char sex, int chinese, int english, int
math)
{
this.Name = name;
this.Age = age;
this.Sex = sex;
this.Chinese = chinese;
this.English = english;
this.Math = math;
}
方法的重载:在同一个类中,方法名相同,参数列表不同(参数的个数、参数的类型、参数的顺序),与返回值无关。
1)、如果参数的个数相同,那么参数的类型就不能相同。
2)、如果参数的类型相同,那么参数的个数就不能相同。
new 就是开辟了一个空间,创建对象
this 在代码执行过程中,谁调用了方法,this 代表的就是谁
this 就是所在函数所属对象的引用。
this: 代表当前对象。代表哪个对象呢?当前对象。
简单说:哪个对象调用了 this 所在的函数,this 就代表哪个对象。
注意:类中所有成员调用都默认省略了 this
在类的成员方法中,如果访问自己类中的成员(成员变量,成员方法),前面默认省略了 this 关键字。
然后就是 static 他的特点是
1. static 是一个修饰符,用于修饰成员。(成员变量和成员方法)
2. static 修饰的成员被所有的对象所共享。
3. static 优先于对象存在,因为 static 的成员随着类的加载就已经存在了。
4. static 修饰的成员多了一种调用方式,就可以直接被类名所调用。使用:类名.静态成员。
5. static 修饰的数据是共享数据,对象中的存储的是特有数据。
他和成员变量的区别
成员变量随着对象的创建而存在,随着对象的被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
静态方法中不可以使用 this(this 代表的是对象)
然后就是属性的省略就比如:
class Player
{
private int money = 100;
public int Money
{
get { return money; }
set { money = value; }
}
}
第六节课 C# 继承
继承通常用于两个类之间的父子关系意思就是子类可以使用父类里的方法但是不能继承父类私有字段
格式:class 子类名: 父类名{ }
举例: class Dog: Pet{ }
Pet: 是父类,也称为基类
Dog: 是子类,也称为派生类
继承的单根行:一个类只能有一个父类
继承的传递性:
然后就是方法的重载
在父类中有一个方法,但是子类中也需要这个方法的名称,但是子类中的方法的逻辑与父类方法中的逻辑不相同,则需要在子类中对这个方法进行重写,重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。
如果父类中有一个方法,则子类中默认是不允许出现同名方法,如果出现了则系统认为是子类中要隐藏父类中的这个同名方法,那么在子类对象调用方法之后则调用到的是子类中的方法
方法重载的三种情况对比:
| 重载情况 | 说明 | 代码示例 |
|---|---|---|
| 参数个数不同 | 方法名相同,参数个数不同,即可构成重载。 | |
| 参数类型不同 | 方法名相同,参数个数相同但参数类型不同,即可构成重载。 | |
| 参数顺序不同 | 方法名相同,参数个数和类型相同但参数顺序不同,即可构成重载。 | |
说明:方法重载与返回值无关,只要参数列表(个数、类型、顺序)不同即可。调用时编译器会根据传入实参的类型和个数自动匹配对应的方法。
矩形二维数组完整示例:
using System; class Program { static void Main() { // 初始化一个 3 行 4 列的矩形二维数组 int[,] matrix = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }; // 遍历输出所有元素 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { Console.Write(matrix[i, j] + "\t"); } Console.WriteLine(); } } } // 运行结果: // 1 2 3 4 // 5 6 7 8 // 9 10 11 12交错数组完整示例:
using System; class Program { static void Main() { // 初始化一个交错数组,外层有 3 个元素 int[][] jaggedArray = new int[3][]; jaggedArray[0] = new int[2] { 1, 2 }; jaggedArray[1] = new int[4] { 3, 4, 5, 6 }; jaggedArray[2] = new int[3] { 7, 8, 9 }; // 遍历输出所有元素 for (int i = 0; i < jaggedArray.Length; i++) { for (int j = 0; j < jaggedArray[i].Length; j++) { Console.Write(jaggedArray[i][j] + "\t"); } Console.WriteLine(); } } } // 运行结果: // 1 2 // 3 4 5 6 // 7 8 9内存分配区别:矩形二维数组int[,]在内存中是一整块连续的空间,所有行长度相同,访问时按行列下标直接计算偏移,效率较高;而交错数组int[][]是「数组的数组」,外层数组只保存指向各子数组的引用,每个子数组在内存中独立分配、长度可以不同,因此更灵活,但访问时需要多一次间接寻址。