C# 的声明语句

5 月 11 日
阅读 5 分钟
121
声明语句声明新的局部变量、局部常量或 reference 局部变量。若要声明局部变量,请指定其类型并提供其名称。可以在一个语句中声明多个相同类型的变量,如以下示例所示:

C# 的模式匹配 - is 和 switch 表达式以及运算符 and、or 和 not 模式

5 月 9 日
阅读 13 分钟
197
使用表达式、switch 语句和 is 将输入表达式与任意数量的特征匹配。C# 支持多种模式,包括声明、类型、常量、关系、属性、列表、var 和弃元。可以使用布尔逻辑关键字 and、or 和 not 组合模式。

C# 的 add 和 remove(事件访问器)

5 月 3 日
阅读 4 分钟
342
下面的例子提供了两个(两组 add 和 remove)事件的访问器,它演示了如何处理不太常见的情况:类继承自两个或多个接口,且每个接口都具有相同名称的事件。在这种情况下,你必须为至少其中一个事件提供显式接口实现。为事件编写显式接口实现时,便必须编写 add 和 remove 事件访问器。在这种情况下,编译器不提供事件的通...

C# 的 where 和 allows(泛型类型约束)

5 月 2 日
阅读 3 分钟
263
泛型定义中的 where 子句指定对用作泛型类型、方法、委托或本地函数中类型参数的参数类型的约束。约束可指定接口、基类或要求泛型类型为引用、值或非托管类型。约束声明类型参数必须具有的功能,并且约束必须位于任何声明的基类或实现的接口之后。

C# 的 async

5 月 1 日
阅读 4 分钟
307
使用 async 修饰符可将方法、lambda 表达式或匿名方法指定为异步。如果对方法或表达式使用此修饰符,则其称为异步方法。如下示例定义了一个名为 FF异步示例 的异步方法:

C# 的 virtual

4 月 28 日
阅读 4 分钟
390
上例中的类 LeiP 继承自 LeiJi,由于 LeiP 是空的(没有重写 FF),因此当声明 LeiP 对象 p 后,可以使用继承自 LeiJi 的方法 FF,输出:继承的方法:2

C# 的 using

4 月 28 日
阅读 10 分钟
403
using 指令允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间。using 指令以基本形式从单个命名空间导入所有类型,如下例所示:

C# 的 unsafe 关键字

4 月 26 日
阅读 1 分钟
326
备注:C# 默认编译器是非 unsafe 的,使用 unsafe 关键字会发生编译错误(警告 CS0227:不安全代码只会在使用 /unsafe 编译的情况下出现)。不能通过公共语言运行时验证 unsafe 代码。若要使用 unsafe 关键字,依如下步骤完成:

C# 的 typeof 运算符

4 月 26 日
阅读 2 分钟
273
typeof 运算符用于获取某个类型的 System.Type 实例。typeof 运算符的实参必须是类型或类型形参的名称,如以下示例所示:

C# 的 this 关键字

4 月 25 日
阅读 2 分钟
374
关键字 this 引用类的当前实例,还用作扩展方法的第一个参数的修饰符。备注:本文讨论如何在类实例中使用 this。有关它在扩展方法中使用的详细信息,请参阅 C# 的 extension 关键字。以下是 this 的常见用法:限定由相似名称隐藏的成员,例如: {代码...} 将一个对象作为参数传递给其他方法,例如:FF ( this );欲声明索...

C# 的 struct 结构

4 月 24 日
阅读 7 分钟
263
结构类型具有值语义。也就是说,结构类型的变量包含该类型的实例。默认情况下,在赋值时复制变量值,将参数传递给方法,并返回方法结果。对于结构类型变量,复制该类型的实例。

C# 的 static

4 月 23 日
阅读 3 分钟
399
使用 static 修饰符可声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于声明 static 类。在类、接口和结构中,可以将 static 修饰符添加到字段、方法、属性、运算符、事件和构造函数。static 修饰符不能用于索引器或终结器。

C# 的 stacklloc 关键字

4 月 22 日
阅读 3 分钟
386
stackalloc 表达式在堆栈上分配一块内存。在方法执行期间创建的堆栈分配内存块在该方法返回时自动丢弃。你不能显式地释放用 stackalloc 分配的内存。堆栈分配的内存块不受垃圾收集的约束,也不必用固定语句固定。

C# 的 sizeof 运算符

4 月 21 日
阅读 2 分钟
392
sizeof 运算符返回给定类型的变量占用的字节数。在非 unsafe 代码中,sizeof 运算符的参数必须是 unmanaged 类型的名称,或是被 constrained(约束)为 unmanaged 类型的类型参数。unmanaged 类型包括所有数值类型、enum 类型和 tuple(元组)和 struct(结构)类型,其中所有成员都是 unmanaged 类型。

C# 的 sealed 关键字

4 月 21 日
阅读 2 分钟
280
该类中的成员不能是 abstract 的,由于它是必须被继承类重写的。警告 CS0513:“密封类 . 方法”是抽象的,但它包含在非抽象类型“密封类”中。

C# 的 ref

4 月 20 日
阅读 2 分钟
305
在以下上下文中,使用 ref 关键字:方法的签名和调用这将使参数的引用地址传递给方法(而不是其值)。 {代码...} 方法签名中按引用返回在方法签名中,按引用将值返回给调用方。 {代码...} 声明 ref 变量在局部变量的声明中,声明 reference 变量。 {代码...} 作为 ref 表达式或运算符的一部分作为 ref 条件表达式或 ref ...

C# 的 readonly

4 月 20 日
阅读 3 分钟
369
在字段声明中,readonly 指示只能在字段声明方法或在同一个类的构造函数中向字段赋值(甚至可以多次赋值)。可以在字段声明和构造函数中多次分配和重新分配只读字段。

C# 的 public

4 月 20 日
阅读 2 分钟
279
public 关键字是类型和类型成员的访问修饰符。public 访问是允许的最高访问级别。对访问 public 成员没有限制,如以下示例所示:

C# 的 protected

4 月 20 日
阅读 1 分钟
271
protected 成员在其所在的类中可由派生类实例访问。相对于 private,它的可访问范围稍有扩大,也就是不仅包括声明它的类,也包括从该类继承来的派生类。

C# 的 private

4 月 20 日
阅读 2 分钟
264
上例中 sy 对象以及在 Main 中使用 LeiSY 的静态方式均无法访问 LeiSY 的“_数量”和“_单价”成员。但在 LeiSY 内部是可以访问的。

C# 的 params 关键字

4 月 20 日
阅读 3 分钟
314
span 类型:** System . Span < T >** System . ReadOnlySpan < T >** 此处,元素类型为 T。

C# 的 override 关键字

4 月 20 日
阅读 5 分钟
365
上例中,“Lei正方形”和“Lei圆”均从“Lei封闭形状”中继承了“_周长”和“_面积”方法,并(必须)提供了新的实现。通过 override 声明重写的方法称为重写基方法。override 方法必须具有与重写基方法相同的签名。override 方法支持协变返回类型。具体而言,override 方法的返回类型可从相应基方法的返回类型派生。

C# 的 operator 关键字(预定义的一元、算术、等于、比较运算符及重载)

4 月 20 日
阅读 3 分钟
294
用户定义的类型可重载预定义的 C# 运算符。也就是说,当一个或两个操作数都是某类型时,此类型可提供操作的自定义实现。“可重载运算符”部分介绍了哪些 C# 运算符可重载。

C# 的 new

4 月 18 日
阅读 2 分钟
378
new 运算符创建类型的新实例。new 关键字还可用作成员声明修饰符或泛型类型约束。构造函数调用要创建类型的新实例,通常使用 new 运算符调用该类型的某个构造函数: {代码...} 可以使用带有 new 运算符的对象或集合初始值设定项实例化和初始化一个语句中的对象,如下例所示: {代码...} 目标类型化 new构造调用表达式由...

C# 的 namespace

4 月 18 日
阅读 2 分钟
433
文件范围的命名空间声明使你能够作出以下声明:一个文件中的所有类型都在一个命名空间中。C# 10 中可使用文件范围的命名空间声明。以下示例与前面的示例类似,但使用了一个文件范围的命名空间声明:

C# 的 lock(确保对共享资源的独占访问权限)

4 月 18 日
阅读 3 分钟
382
lock 语句获取给定对象的互斥锁,执行语句块,然后释放锁。当锁被持有时,持有该锁的线程可以再次获取并释放该锁。任何其他线程都被阻止获取锁并等待,直到锁被释放。lock 语句确保在任何时刻最多只有一个线程执行它的线程体。

C# 的 is 关键字

4 月 18 日
阅读 2 分钟
319
is 运算符检查表达式的结果是否与给定的类型相匹配。还可使用 is 运算符将表达式与模式相匹配,如下例所示: {代码...} 上例输出 True(2000 年的 10 月 6 日确实是该月第一个星期五)。在前面的示例中,is 运算符将表达式与关系模式和带有嵌套常量的属性模式相匹配。is 运算符在以下应用场景中很有用:检查表达式的运行...

C# 的 internal

4 月 18 日
阅读 2 分钟
383
internal 访问通常用于基于组件的开发,因为它可使一组组件以私有方式进行协作,而不必向应用程序代码的其余部分公开。例如,用于生成图形用户界面的框架可以提供 Control(控件)和 Form(窗体)类,这两个类通过使用具有内部访问权限的成员进行协作。由于这些成员是内部的,因此不会向正在使用框架的代码公开。

C# 的接口(interface)

4 月 18 日
阅读 4 分钟
376
接口定义协定。实现该协定的任何 class、record 或 struct 必须提供接口中定义的成员的实现。接口可为成员定义默认实现。它还可以定义 static 成员,以便提供常见功能的单个实现。 从 C# 11 开始,接口可以定义 static abstract 或 static virtual 成员来声明实现类型必须提供声明的成员。通常,static virtual 方法声明...

C# 的 in

4 月 17 日
阅读 1 分钟
269
在以下上下文中,使用了 in 关键字:泛型接口和委托中的泛型类型参数。作为参数修饰符,它允许按引用而不是按值向方法传递参数。foreach 语句。LINQ 查询表达式中的 from 子句。LINQ 查询表达式中的 join 子句。

C# 的 fixed

4 月 17 日
阅读 2 分钟
327
fixed 语句可防止垃圾回收器重新定位可移动变量,并声明指向该变量的指针。固定变量的地址在语句的持续时间内不会更改。只能在相应的 fixed 语句中使用声明的指针。 声明的指针是只读的,无法修改:

C# 的异常捕捉和引发

4 月 17 日
阅读 7 分钟
435
使用 throw 和 try 语句来处理异常。 使用 throw 语句引发异常。 使用 try 语句捕获和处理在执行代码块期间可能发生的异常。

C# 的 extern(外部)

4 月 17 日
阅读 1 分钟
386
extern 修饰符用于声明在外部实现的方法。当您使用互操作服务调用非托管代码时,extern 修饰符的常见用法是与 DllImport 属性一起使用。在这种情况下,方法也必须声明为 static 的,如下面的例子所示:

用户定义的显式(explicit)和隐式(implicit)转换操作符

4 月 17 日
阅读 2 分钟
299
如果相同的两个类型之间不存在标准转换,则用户定义类型可以定义自定义的与另一个类型之间的隐式或显式转换。隐式转换不需要调用特殊的语法,可以发生在各种情况下,例如,在赋值和方法调用中。预定义的 C# 隐式转换总是成功的,从不抛出异常。用户定义的隐式转换也应该以这种方式运行。如果自定义转换可能抛出异常或丢...

C# 的事件(event)

4 月 16 日
阅读 2 分钟
356
事件是使对象能够触发通知的成员。事件用户可以通过提供事件处理程序为事件附加可执行代码。event 关键字声明一个事件。事件是委托类型。当对象触发事件时,该事件调用所有提供的事件处理程序。事件处理程序是添加到事件并在引发事件时执行的委托实例。事件用户可以在事件上添加或删除其事件处理程序。

C# 的枚举(enum)

4 月 16 日
阅读 2 分钟
416
枚举类型(enum 或 enumeration)是由基础整型数值类型的一组命名常量定义的值类型。要定义枚举类型,请使用 enum 关键字并指定枚举成员的名称: