本文为C#基础知识,是在有一定C语言或C++基础上进行的总结,因此会省略许多C语言的基础知识,但是对一些C#特有或者是C语言中比较少见或重要的知识也会归纳到博文里。
承接上文C#入门知识https://blog.csdn.net/danielxinhj/article/details/130401403
目录
一、复杂数据类型
1.枚举
a.定义
b.声明
c.枚举的类型转换(不常用)
2.数组
a.交错数组(几乎不用 有兴趣可了解)
二、值与引用
1.特殊引用类型string
三、函数
1.有参有多返回值函数
四、ref和out
1.ref是函数参数的修饰符
2.out也是函数参数修饰符
五、变长参数和参数默认值
1.变长参数关键字
2.参数默认值
六、函数重载
七、结构体
1.访问修饰符
2.结构体构造函数
两种类型:
包括:枚举、数组、结构体
是一个被命名的整型常量的集合 一般便是状态、类型
//枚举名 以E或者E_开头,作为我们的命名规范
enum E_自定义枚举名
{
自定义枚举项名字1, //默认第一个值是0 下面依次累加
自定义枚举项名字2,
自定义枚举项名字3,
}
如果自己给其中一个枚举项赋了值,那么后面的项都会在此基础上递增,除非人为的再次改变
公式:自定义的枚举类型 变量名 = 默认值; (自定义的枚举类型.枚举项)
enum E_PlayerType
{
Main, //默认第一个值是0 下面依次累加
Other,
}
E_PlayerType playerType = E_PlayerType.Main;
枚举和switch语句非常适合,switch括号中写上常量,后面会自动补全。
// 枚举和int互转
int i = (int)playerType;
Console.WriteLine(i);
// 枚举和string相互转换
string str = playerType.ToString();
Console.WriteLine(str);
// string转为枚举
// Parse后 第一个参数:你要转为的是哪个 枚举类型 第二个参数:用于转换的对应枚举项的字符串
playerType = (E_PlayerType)Enum.Parse(typeof(E_PlayerType),"other");
与C语言中数组原理相同
引用类型有:string、数组、类
值类型:除引用类型之外如char、int、short、bool和结构体等一系列
每次赋值、拼接都会在堆中重新分配空间
基本与C语言相通
static int[] Calc(int a,int b)
{
int sum = a + b;
int avg = sum / 2;
int[] arr = {sum, avg};
return arr;
//return new int[] {sum, avg}; //也可直接在return中新建数组返回
}
static void ChangeValue(ref int value)
{
value = 3;
}
//调用函数时
int a = 2;
ChangeValue(ref a);
和ref使用上一模一样
// 如果不加out或ref 函数内的赋值便无法影响到外部
static void ChangeValue(out int[] arr)
{
arr = new int[] {1,2,3};
}
int[] arr1 = {10,20,30};
ChangeValue(out arr1);
但ref和out也有区别,在于:
int a;
ChangeValueRef(ref a);//会报错!必须初始化
ChangeValueOut(out a);//不会报错
params int[] 意味着可以传入n个int参数 n可以等于0 传入的参数会存在arr数组当中
注意:
//求n个整数和的函数
static int Sum(params int[] arr)
{
//利用for循环求数组内的数字和即可
}
//调用时
Sum(1,2,3,4,5,6);//可以传任意多个参数
有参数默认值的参数一般称为可选参数
当调用函数时可以不传入参数,不传就会使用默认值
如果要混用 那么可选参数必须写在普通参数后面
static void Speak(string str = "还没有话语")
{
console.WriteLine(str);
}
//调用时可以不传入参数
Speak();
要求:
static int CalSum(int a,int b)
{
}
//这两个函数也不不能同时出现,即使其中一个用的是可选参数
static int CalSum(int a , int b = 1)
{
}
结构体一般写在namespace语句块中
关键字是struct
struct 自定义结构体名
{
//变量
//构造函数(可选)
//函数
}
写一个学生结构体的实例
struct Student
{
string name;
int age;
bool sex;
int id;
// 注意结构体中的方法 目前不需要加static
void Speak()
{
//可以使用前面声明的变量
}
}
修饰结构体中的变量和方法 能否被外部使用
public是公共的 private是私有的(默认都是私有的)
//student结构体内要写的构造函数
public student(int age, bool sex, int number, string name)
{
this.age=age;
this.sex=sex;
this.number=number;
this.name=name;
}