1.abstractabstract表示抽象的在C#中一般用来修饰抽象类和抽象成员属性、方法等当方法被abstract修饰后就会要求其子类必须实现这个抽象方法。public abstract class Animal { public abstract void MakeSound(); // 这是一个抽象的方法没有方法体需要子类实现 public void Sleep() // 这是一个具体的方法具有方法体 { Console.WriteLine(Sleeping...); } } //可以看到抽象类里可以有抽象方法和非抽象方法。2.basebase用于从子类中访问父类的成员字段、方法、属性、构造函数等。子类可以使用父类的构造函数。public class Animal { public string Name { get; set; } public Animal(string name) { Name name; } } public class Dog : Animal { public string Breed { get; set; } public Dog(string name, string breed) : base(name) // 调用基类构造函数 { Breed breed; } }base只能用在实例构造函数、实例构造方法、实例属性里使用不能在静态方法里使用不能用base调用抽象方法没有方法体调用无意义。3.breakbreak一般用来跳出它所在的最近一层循环或者跳出swich语句继续执行之后的代码。在用于跳出循环的时候break只会跳出最近的一层循环。for (int i 0; i 3; i) { for (int j 0; j 3; j) { if (j 1) { break; } // 只跳出内层 for 循环 Console.WriteLine(${i},{j}); } } // 输出(0,0) (1,0) (2,0)在用于跳出swich分支的时候每个case块后面通常需要接上break或者其他的跳转语句return、gotoint option 2; switch (option) { case 1: Console.WriteLine(一); break; case 2: Console.WriteLine(二); break; // 跳出 switch不执行后面的 case default: Console.WriteLine(其他); break; }4.catchcatch一般和try配对使用当try中的代码出现了异常的时候控制流会跳转到相匹配的catch块来避免程序因为没处理的异常而终止可以使用多个catch来捕获不同类型的异常。try { // 可能引发多种异常的代码 } catch (DivideByZeroException ex) { Console.WriteLine(除数不能为零); } catch (FormatException ex) { Console.WriteLine(格式错误); } catch (Exception ex) // 通用捕获必须放在最后 { Console.WriteLine(其他异常 ex.Message); }5.continuecontinue的作用是立即跳出当前的循环不执行之后的代码直接进行下一次的循环。for (int i 0; i 5; i) { if (i 2) { continue;// 跳过 i2继续 i3,4 } if (i 4) { break;// 终止循环i5 不再执行 } Console.WriteLine(i); // 输出 0,1,3 }6.finallyfinally用于确保一段代码无论是否发生异常都会执行。通常和try搭配使用比如用来释放资源。FileStream fs null; try { fs File.Open(data.txt, FileMode.Open); // 读取文件... } catch (IOException ex) { Console.WriteLine(读取失败: ex.Message); } finally { // 无论成功或失败都确保文件被关闭 fs?.Close(); }7.locklock用于线程的同步中确保同一时刻只有一个线程能够执行被lock锁住的代码块。它一般用来保护共享的资源不被多线程同时访问导致的数据损坏或状态不一致。//lock的基本语法 lock (lockObject) { // 临界区Critical Section // 同一时间只有一个线程能执行这里的代码 }lockobject用来表示锁的对象它必须是引用类型一般是一个静态的对象或者私有的实例。lock不能用于值类型。8.namespacenamespace用来组织代码分组类、接口等类型它的作用是避免命名冲突控制作用域。//namespace基本用法 namespace MyCompany.Utilities { public class Logger { } internal class FileHelper { } } namespace MyCompany.Business { public class OrderService { } }9.new在C#中new的作用主要包括实例化对象隐藏父类的成员对泛型类型进行约束。当创建实例时使用new在堆上分配内存并调用构造函数。Person p new Person(); // 调用无参构造 Person p2 new Person(张三); // 调用有参构造 var arr new int[10]; // 创建数组 var dict new Dictionarystring, int(); // 创建集合匿名类型也可以用newvar student new { Name 李四, Age 20 };当new作为修饰符的时候它也可以用来隐藏父类的成员public class Animal { public void Speak() Console.WriteLine(动物叫); } public class Dog : Animal { public new void Speak() Console.WriteLine(狗叫); // 隐藏基类方法 } Dog dog new Dog(); dog.Speak(); // 输出狗叫 Animal animal dog; animal.Speak(); // 输出动物叫父类版本未被重写同时new可以用来对泛型类型进行约束public T CreateInstanceT() where T : new() { return new T(); // 合法因为 T 保证了有无参构造 } // 使用这个方法 class MyClass { public MyClass() { } } var obj CreateInstanceMyClass();这里new要求T必须具有一个公共的无参构造函数。10.outout用于按引用传递参数并确保其调用的方法必须为这个参数进行赋值。一般的方法只能返回一个值使用out后可以拿到多个参数public void GetValues(out int a, out string b) { a 42; // 必须赋值 b Hello; // 必须赋值 } // 调用上面的方法 GetValues(out int x, out string y); Console.WriteLine(${x}, {y}); // 42, Hello用在TryParse里使用out返回解析的结果并用bool返回值来表示成功与否。if (int.TryParse(123, out int result)) { Console.WriteLine($解析成功: {result}); } else { Console.WriteLine(解析失败); }out参数在传入之前可以不初始化在方法内必须赋值。