C#基础
概览
学习 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();