explicit:指定构造函数和转换函数为显性,防止隐式转换。
implicit :隐式转换,使用需要注意。
const:形参中什么时候需要使用const。类对象作为参数传递时要把形参写成 const 引用的形式。
extern:可以在一个文件中引用另一个文件中定义的变量或者函数。
注意:1、利用extern关键字先声明变量,这个变量必须在其他文件或本文件中去声明。
2、extern声明在其他文件的变量,该变量必须是全局变量。
3、extern关键字只需要指明类型和变量名就行了,不能再重新赋值。
finally:当一个异常抛出时,它会改变程序的执行流程。因此不能保证一个语句结束后,它后面的语句一定会执行,在 C# 中这个问题可以用 finally 解决。为了确保一个语句总是能执行(不管是否抛出异常),需要将该语句放到一个 finally 块中,finally 要么紧接在 try 块之后,要么紧接在 try 块之后的最后一个 catch 处理程序之后。只要程序进入与一个 finally 块关联的 try 块,则 finally 块始终都会运行 -- 即使发生了一个异常。
(95条消息) C# 中 finally 的用法_c#里的finally使用方法_转角撞倒猪的博客-CSDN博客
fixed:禁止垃圾回收器重定位可移动的变量。 fixed 语句只在 不安全的上下文中是允许的,使用关键字unsafe。
using System; namespace basicTest { public class Test { static void Main() { int[] arr = { 1, 2, 3, 4, 5 }; Func(ref arr); Array.ForEach(arr,x => Console.WriteLine(x)) ; } //想通过指针,将数组中的每个数值加1 public static void Func(ref int[] arr) { unsafe { //int*[] parr = new int*[5]; //for (int i = 0; i < 5; i++) //{ // //parr[i] = (int*)&arr[i]; // *parr++; //} //for (int i = 0; i < 5; i++) //{ // (*parr[i])++; //} fixed (int* pArr = &arr[0]) { for(int i=0;i<5;i++) { *(pArr + i)+=1; } } } } } }
static:静态类、成员、函数用法。
1、静态类不能实例化,不能使用new创建静态类类型变量。
2、静态成员只被创建一次。
3、静态函数只能调用静态成员,不能调用非静态函数,但非静态函数可以调用静态函数。
4、静态函数的调用直接使用类名,或者直接调用就可以。
interface:接口。
1、接口用于描述一组类的公共方法/公共属性。
2、接口中的方法没有具体实现,也就是没有方法体,必须由继承者去实现而且必须全部实现。
3、 接口中的方法不需要修饰符,默认就是公有的(Default / Public)。
4、接口可以包含方法、属性、索引器、事件。不能包含任何其他的成员,例如:常量、字段、域、构造函数、析构函数、静态成员。
internal:内部访问。 修饰的类只能在同一个程序集中使用,即同一个dll或者同一个exe程序集。
override:扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现需要
override
修饰符。1、不能使用
new
、static
或virtual
修饰符修改override
方法。2、不能重写非虚方法或静态方法。 重写基方法必须是
virtual
、abstract
或override
(95条消息) C#关键字之override详解_public override void_入秋枫叶的博客-CSDN博客
params:是C#的关键字, 可变长参数,是在声明方法时参数类型或者个数不确定时使用。
1、参数数组必须是一维数组。
2、不允许将params修饰符与ref和out修饰符组合起来使用。
3、与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量。
4、若实参是数组则按引用传递,若实参是变量或表达式则按值传递。
5、形式为:方法修饰符 返回类型 方法名(params 类型[ ] 变量名)。
6、params参数必须是参数表的最后一个参数。
readonly:动态常量,被赋值后不允许改变。
1、通常用在类中属性前面
2、使用了readonly的属性,只能在定义时,或者构造函数中初始化,其他的地方都不能再修改其值
class Age { //年纪添加了 readonly修饰符 //1.可以在定义时对其赋值 readonly int year=20; //2.在构造函数中赋值 Age(int year) { this.year = year; } //3.但是不能在其他地方赋值 void ChangeYear() { year = 1967; // 如果这里赋值了,会出现编译错误 } }
sealed:密封。 它修饰的类或方法将不能被继承或重写。
1、在类中使用sealed修饰符可防止其他类继承此类
2、在方法声明中使用sealed修饰符可防止扩充类重写此方法
abstract
abstract 修饰符可用于类、方法、属性、索引和事件。抽象类具有以下功能:
抽象类仅用作派生类的基类,而不能实例化。
无法使用 sealed 修饰符来修改抽象类,因为两个修饰符的含义相反。 sealed 修饰符阻止类被继承,而 abstract修饰符要求类被继承。
派生自抽象类的非抽象类,必须包含全部已继承的抽象方法和访问器的实际实现。
抽象方法具有以下功能:抽象方法是隐式的虚拟方法。
只有抽象类中才允许抽象方法声明。
由于抽象方法声明不提供实际的实现,因此没有方法主体;方法声明仅以分号结尾,且签名后没有大括号 ({ })。
在抽象方法声明中使用 static 或 virtual 修饰符是错误的。
在静态属性上使用 abstract 修饰符是错误的。
通过包含使用 override 修饰符的属性声明,可在派生类中重写抽象继承属性。
类继承IDisposable
如果一个类继承了IDisposable接口,那么该类就必须实现Dispose方法。在该类的实例不再需要时,可以调用Dispose方法手动释放类型持有的资源,如打开的文件、数据库连接、网络连接等。这样可以确保这些资源被及时释放,从而避免浪费、泄漏或者其他潜在的问题。
通过实现IDisposable接口和Dispose方法,我们可以更好地控制和管理资源使用,提高应用程序的可靠性和稳定性。