No title

1,protected和protected internal

protected:

访问范围:protected 修饰符表示成员可以被同一类或其派生类(无论这些派生类是否在同一个程序集中)访问。
适用场景:当你希望某个成员仅供类本身和任何派生类使用时,可以使用 protected。

protected internal:

访问范围:protected internal 修饰符表示成员可以被同一程序集内的任何代码访问,也可以被其他程序集中的派生类访问。
适用场景:当你希望某个成员在同一程序集内完全可见,但在不同程序集中的派生类也能访问时,可以使用 protected internal。

2,子类和父类转化

子类能转换成父类 father = child √
父类不能转换成子类 child = father ×

普通方法需要对象调用
静态方法可以直接调用,不能有实例

3,运算符重载的基本原则

使用operator关键字:运算符重载使用operator关键字定义。
静态方法:重载运算符的方法必须是static。
参数和返回类型:运算符重载的方法的参数类型和返回类型通常为定义运算符的类或结构体类型。
对称性和一致性:尽量保持运算符的对称性和一致性,以便使用者能够直观理解其行为。

4,扩展方法的定义和使用

扩展方法是静态方法,但它们可以像实例方法一样被调用。定义扩展方法的类也必须是静态类。
扩展方法的适用情况
扩展不可修改的类:当你需要为不可修改的类(如系统类或第三方库类)添加功能时,可以使用扩展方法。

增强接口:可以为接口定义扩展方法,使所有实现该接口的类都能使用这些方法。

提供链式调用:扩展方法可以用于实现链式调用,使代码更加流畅和易读。

分离逻辑:将一些辅助功能或扩展功能从核心类中分离出来,以保持核心类的简洁性和聚焦度。

5,默认值参数的顺序:

具有默认值的参数应该放在没有默认值的参数之后。
static void PrintMessage(string message, int repeatCount = 1, params string[] additionalMessages)

6,装箱和拆箱

装箱是将值类型转换为引用类型 ;

拆箱是将引用类型转换为值类型。

看两种类型是否发生了装箱或者拆箱,要看他们是否具有继承关系,有继承关系才有可能发生装箱或拆箱.

string str = "123"; int n = Convert.ToInt32(str);//没有任何类型发生装箱或拆箱

1
2
3
4
5
6
7
8
Stopwatch sw = new Stopwatch(); //看运行时长
sw.Start();
for (int i = 0; i < 1000000; i++)
{
list.Add(i);//把int类型 i 转化为引用类型object 装箱操作
}
sw.Stop();
Console.WriteLine(sw.Elapsed);//00:00:00.0794428

7,in和out关键字

in 关键字用于修饰方法参数,以表示该参数是以引用方式传递给方法的,并且在方法内部不能被修改。

out 关键字用于修饰方法参数,表示该参数是用来从方法中返回多个值的。在方法内部,out 参数必须被赋值才能在调用者中使用。out 参数主要用于在方法中返回多个值。

8,语法和约定

语法:数字[0-9],字母[a-zA-Z],下划线@可以当标识符但必须在开头使用,但数字不能开头,

约定:类名约定首字母大写,方法约定使用大驼峰,方法参数约定小驼峰

9,静态static

静态构造函数只在第一次实例化时执行一次,以后不再执行,先执行静态构造函数

静态类中只能有静态成员(字段,属性,方法,事件,索引器)

静态构造函数不能有修饰符

在 C# 中,静态方法是属于类而不是类的实例的方法。这意味着你可以在不创建类实例的情况下调用静态方法。静态方法通常用于那些不依赖于类的实例状态的方法,例如工具方法、工厂方法或用于提供通用功能的帮助方法。

静态方法的特点

  1. 无法访问实例成员:静态方法不能直接访问类的实例字段或属性。它们只能访问静态字段、静态属性和其他静态方法。
  2. 可以通过类名调用:静态方法是通过类名调用的,不需要创建类的实例。
  3. 通常用于工具类或辅助类:静态方法常用于定义那些与特定对象无关的功能,如数学计算、字符串处理等。