c#-01

发布于:2024-10-17 ⋅ 阅读:(5) ⋅ 点赞:(0)

概览

学习 unity 游戏开发所需要的 C#知识点
进行部分记录

输入语句

ReadLine(): 输入很多信息
ReadKey(): 输入一个字符,自动输入完毕

region endregion 折叠变量

sizeof

常量

const

转义字符

取消转义字符

@加载字符串前面

string ss = @"\n";

显式转换

括号强转

Parse

string ss = “66”;
int ss2 = int.Parse(ss);

Convert

要注意这三个
在这里插入图片描述

异常捕获

try{
}catch(Exception e){
}
finally{
}

字符串拼接

1. 加号
2. string.Format("{0}{1}","xx","xxx");

控制台

char c = Console.ReadKey(true).KeyChar; // 不把输入的字符显示到控制台上面
// 设置控制台窗口大小
Console.SetWindowsSize(100,50);
// 设置缓冲区大小 可打印内容区域的宽高
Console.SeetBufferSize(1000,1000);
// 设置输入的坐标.
Console.SetCursorPosition(0,1);

在这里插入图片描述

// 设置文字颜色
Console.ForegroundColor = ConsoleColor.Red;
// 隐藏光标
Console.CursorVisible(false);

随机数

Random r = new Random();
r.Next(8,13); // 生成8-12 这几个数字中的一个

C#基础

枚举

enum EName{
	NAME1,
	NAME2,
	NAME3,
}

使用

EName ename1 = EName.NAME1;

格式转换

EName eName = Enum.Parse(ltypeof(EName),"other");
int i = (int) eName;

string

函数


ref out

使用ref

内外函数需要一起使用 传递的要用 被调用的函数也要用
传递的参数必须初始化

使用out

不必初始化
但是内部必须修改值

变长参数

// param
static int add(param int[] a){
	
}

param用于数组传递

参数默认值

static void pp(string str = "没什么话可说"){
	
}

结构体

struct Student{
	int age;
	bool name;
	// 不能是自己的结构体
	void Speak(){
		// 可以使用上面的变量
	}
}

结构体中public的属性才能够被访问
默认是 private

Class

person内部的 person,不要实例化否则会无限循环

构造

可以重载

public Person(){
}
public Person(int age,string name):this(){
}

先调用 this() 在调用 本身

属性

在这里插入图片描述
可以直接使用 value 关键字,表示外部传递的值

私有属性

在这里插入图片描述

自动成员变量

public float Height{
	get;
	set;
}

代表着有一个成员变量.写的比较简洁

索引器

声明

public void this[paramType paranName,...]{
	
}

静态类

不能声明非静态的成员

静态构造函数

不能有访问修饰符
不能有参数
只能自动调用一次
在构造函数中初始化静态变量

最先调用

扩展方法

定义在静态类中
必须是静态的

public static void name(this 扩展类名 参数名,paramType paramName){

}

在这里插入图片描述

使用

在这里插入图片描述

注意

如果本身方法和扩展方法重名,会调用本身方法

运算符重载

需要成对实现 不能使用 ref 和 out

public static returnType operator 运算符(paramType paramName){
}

在这里插入图片描述

在这里插入图片描述

内部类

类种类

public class A{
	public class B{
		// ..
	}
}

在这里插入图片描述

分部类

partial class Student{
	public bool sex;
	public string name;
}
partial class Student{
	public int age;
	public void getAge(){
		
	}
}

分部方法

partial void ss(){
}

在这里插入图片描述
在这里插入图片描述

继承

new 属性

public class A{
	public int age;
}

public class B : A{
	public new int age; // 不建议这么使用
}

构造

先执行父类构造,在执行子类构造

密封类–让类无法被继承

sealed  class Son : Father{
	
}

不允许最底层子类被继承
在这里插入图片描述

多态

virtual 虚函数 
override 重写
base 父类

virtual

声明一个虚函数,可以被子类重写

// 父类方法 虚函数
public virtual void Atk(){}
// 子类方法 重写
public override void Atk(){
	base.Atk(); // 通过base关键字调用该父类方法
}

接口

只包含 方法 属性 索引器 事件
interface A{
	
}

接口多继承
类单继承

显式实现

public class MyClass : IMyInterface
{
    void IMyInterface.MyInterfaceMethod()
    {
        // 实现接口方法
    }
}

密封方法

使用 sealed 修饰的重写函数
让被重写的方法不能够再被重写

StringBuilder

.Length
Capacity
.Append()
.AppendFormat()
.Remove(startIndex,Length)
.Clear()
.Replace()

结构体

可以继承接口

ArrayList

.Add
.Remove(0) // 移除指定位置的元素
.RemoveAt(2) // 移除指定位置的元素

默认值

default(T);
可以获得数据类型的默认值

泛型

泛型类


泛型方法

// 这里的泛型方法.需要和泛型类上面的T不一致.
public class Test1<T>{
	// 这里使用的是泛型类的泛型参数.不必在方法上面填写<>
	public T testFunc2(){}
}
public class Test2{
	
	public void TestFun<G>(){
	}
}

泛型接口

泛型约束

略 ...

委托

delegate void MyFun();

使用

MyFun m = new MyFun(Fun);
m.Invoke();
// 这种使用方式也可以
m();
public void Fun(){
}

多播委托

可以存储多个函数

delafate void TestFun();

public void sss(){
}

TestFun fun = new TestFun(sss);
fun = fun  + fun;

系统提供的委托

Action action; // 无参无返回值委托
Func func;// 无参有返回委托

返回值

public Action test(){
	Action ac = xxx;//
	return ac;
}

事件

略...

匿名函数

无参

// 函数中 传递委托参数
// 委托或事件赋值
delegate(参数列表){

};

配合 委托和事件进行

Action ac = delegate(){
	Console.Writeline("匿名函数的逻辑");
};

有参

Action<int,string> ac = delegate(int a,string b){
	
};
ac(100,"123");

有返回值

Func<string> func = delegate(){
	return "xxx";
};

lamdba表达式

无参无返回

Action a = () => (){
};
a();

有参无返回

Action<int> a = (int b) => {
	
};
a(100);

有参有返回

Func<string,int> func = (string value) => {
	Console.Writeline("这是传递的参数" + value);
	return 1;'
};
func("1");

闭包

在这里插入图片描述

多线程

Thread t = new Thread();
t.isBackground(); // 后台运行
t.Start();

预处理器指令

其他…