- 博客(30)
- 收藏
- 关注
原创 C#初学-goto关键字
如果 `i` 等于 5,我们设置 `condition` 为 `true` 并使用 `goto` 关键字跳转到 `EndOfLoop` 标签。在现代编程中,通常推荐使用更结构化的控制流程语句,如 `break`、`continue`、`return` 或异常处理,来控制程序的执行。- `goto` 语句会导致循环立即终止,并跳转到 `EndOfLoop` 标签处继续执行。- **无条件跳转**:`goto` 关键字允许程序跳转到同一方法内指定的代码标签。// 被跳转到的代码位置。
2024-10-24 00:42:05
370
原创 C#初学-foreach关键字
然而,由于 `foreach` 循环不允许修改集合中的元素,如果需要修改集合,可能需要使用传统的 `for` 循环或 `for` 循环的变体。- **简洁性**:它提供了一种简洁的方式来访问集合中的每个成员,而不需要使用索引或复杂的迭代逻辑。- **集合遍历**:`foreach` 循环用于遍历数组、委托、列表、字典等集合中的每个元素。- **只读访问**:`foreach` 循环只能用于读取集合的元素,不能用于修改元素。- **集合**:要遍历的数组或集合。- **类型**:集合中元素的类型。
2024-10-24 00:41:16
322
原创 C#初学-for关键字
循环的条件是 `i < 10`,这意味着只要 `i` 小于 `10`,循环就会继续执行。- **condition**:每次循环迭代前检查的条件,如果为真,执行循环体。- 当 `i` 达到 `10` 时,条件 `i < 10` 不再满足,循环结束。- **初始化**:在 `for` 循环中,首先声明和初始化循环计数器。- **条件检查**:在每次迭代之前,检查循环条件是否为真。- **迭代执行**:如果条件为真,则执行循环体中的代码。- **更新**:执行循环体后,更新循环计数器。
2024-10-24 00:40:39
303
原创 C#初学-float
在这些情况下,推荐使用 `double` 类型或 `decimal` 类型。- 在第一个例子中,我们定义了一个 `float` 类型的变量 `pi`,并使用 `f` 后缀来表示这是一个 `float` 类型的字面量。- **单精度浮点类型**:`float` 是一种数值类型,用于存储单精度(32位)浮点数,适合于需要快速计算和处理大量数据的场景。- 在第二个例子中,我们定义了另一个 `float` 类型的变量 `eValue`,代表数学常数 e,并打印其值。// 使用 'f' 后缀。// 使用科学计数法。
2024-10-24 00:40:00
435
原创 C#初学-fixed关键字
**指针操作**:在 C# 中,`fixed` 通常与非安全代码(即包含指针操作的代码)一起使用,允许开发者对内存进行更底层的操作。- **固定内存**:`fixed` 语句可以固定一个或多个指针,使得在固定期间,垃圾回收器不会移动这些指针所指向的对象。- 使用 `fixed` 语句固定数组的内存,以便我们可以安全地使用指针来访问和修改数组元素。- 在 `fixed` 块内,我们获取数组第一个元素的指针,并使用该指针修改数组的第一个元素。- 我们也可以直接通过固定指针 `p` 来修改数组的第二个元素。
2024-10-24 00:39:26
519
原创 C#初学-finally关键字
即使在 `try` 或 `catch` 块中使用 `return` 语句,`finally` 块仍然会执行。关键字 `finally` 在 C# 中用于定义一个代码块,该代码块将在 `try` 语句块后的 `catch` 块执行后无论是否发生异常都会执行。- **最终执行块**:`finally` 代码块总是会执行,不管前面的 `try` 和 `catch` 块中是否有异常抛出。- 无论 `try` 块是否抛出异常,`finally` 块都会执行。- `catch` 块捕获了异常,并打印了异常信息。
2024-10-24 00:38:37
373
原创 C#初学-false关键字
布尔类型 `bool` 除了 `false` 之外,还有一个 `true` 值,表示逻辑上的真(truth)。- `if` 语句检查 `isRaining` 是否为 `true`。由于它是 `false`,所以 `if` 块中的代码不会被执行。- **布尔假值**:`false` 是布尔类型 `bool` 的两个值之一,表示逻辑上的假(falsehood)。- 在这个例子中,我们定义了一个名为 `isRaining` 的布尔变量,并将其初始化为 `false`。
2024-10-23 01:02:54
186
原创 C#初学-extern关键字
这在需要访问操作系统特定的功能或使用现有的本地库时非常有用。- `DllImport` 属性用于指定包含外部方法的 DLL 文件,以及该方法在 DLL 中的名称(在这种情况下,我们引用了 C 语言的 `printf` 函数)。- **外部方法引用**:使用 `extern` 关键字声明的方法,C# 编译器会假设该方法是在其他地方实现的,通常是在动态链接库(DLL)中。- 在 `Main` 方法中,我们调用了 `Print` 方法,实际上是调用了 C 语言的 `printf` 函数。
2024-10-23 01:02:23
657
原创 C#初学-explicit关键字
在 `Meters` 结构中,我们使用 `explicit` 关键字定义了一个转换运算符,将 `Meters` 显式转换为 `Miles`。- 由于这是一个显式转换,所以在转换时必须使用显式语法,如 `(Miles)meters` 或 `meters.Miles()`。- **防止意外转换**:显式转换提高了类型转换的安全性,因为它们不允许无意中或自动进行转换,这可以防止一些不安全的转换操作。- **显式转换**:使用 `explicit` 关键字定义的转换运算符要求在转换时必须使用显式语法。
2024-10-23 01:01:49
375
原创 C#初学-vent关键字
`Thermostat` 类声明了一个 `TemperatureChanged` 事件,它使用了 `TemperatureChangedEventHandler` 委托类型。- 在 `Main` 方法中,我们创建了 `Thermostat` 类的实例,并订阅了它的 `TemperatureChanged` 事件。- **事件声明**:`event` 关键字用于声明一个事件,它是一种特殊的多播委托,用于在特定情况下通知多个订阅者(事件处理程序)。// 如果有订阅者,则引发事件。// 引发事件的方法。
2024-10-23 01:01:11
448
原创 C#初学-enum关键字
你也可以指定其他整数类型作为枚举的底层类型,例如 `byte`、`sbyte`、`short`、`ushort`、`uint` 或 `long`。- 在 `Main` 方法中,我们声明了一个 `Day` 类型的变量 `today`,并将其初始化为 `Day.Friday`。- 然后我们使用 `if` 语句检查 `today` 是否等于 `Day.Friday`,并根据结果打印相应的消息。在这个例子中,`DayOfWeek` 枚举的底层类型被指定为 `byte`。// 定义一个具有显式底层类型的枚举。
2024-10-23 01:00:31
290
原创 C#初学-else关键字
**条件分支**:`else` 关键字与 `if` 语句一起使用,当 `if` 条件为 `false` 时,`else` 块中的代码将被执行。- `if` 语句检查 `number` 是否小于 `5`,由于条件为 `false`,所以 `if` 块中的代码不会被执行。关键字 `else` 在 C# 中用于 `if` 语句,作为 `if` 条件不满足时的替代执行块。- **可选性**:`else` 块是可选的,一个 `if` 语句可以没有 `else` 块。
2024-10-23 00:59:59
188
原创 C#初学-double关键字
由于浮点数的表示方式,`0.1 + 0.2` 的结果并不是精确的 `0.3`,而是 `0.30000000000000004`,这显示了浮点数在计算时可能出现的舍入误差。- **范围与精度**:`double` 类型的数值范围大约在 ±5.0 × 10^-324 到 ±1.7 × 10^308,具有约15到16位的有效数字。- 在第一个例子中,我们定义了一个 `double` 类型的变量 `radius`,并计算了圆的面积,使用 `Math.PI` 获取圆周率。// 使用科学计数法。
2024-10-23 00:59:24
581
原创 C#初学-do关键字
**`do-while` 循环**:`do` 关键字用于开始一个 `do-while` 循环,这种循环至少执行一次循环体,然后根据条件判断是否继续执行循环。- **条件在后**:与 `while` 循环不同,`do-while` 循环的条件检查位于循环体的末尾,确保循环体至少执行一次。- `do-while` 循环开始执行,循环体打印当前的 `counter` 值,然后 `counter` 的值增加 `1`。- 在这个例子中,我们定义了一个名为 `counter` 的变量,并初始化为 `0`。
2024-10-23 00:58:54
241
原创 C#初学-delegate关键字
在 `Main` 方法中,我们创建了一个 `Operation` 类型的委托实例 `op`,并将其实例化指向 `Add` 方法。当我们调用 `op` 时,实际上是调用了 `Add` 方法。- 然后我们在 `Program` 类中定义了两个静态方法 `Add` 和 `Subtract`,它们的签名与 `Operation` 委托的签名匹配。- 然后我们将 `op` 委托指向 `Subtract` 方法,并再次调用 `op`,这次实际上是调用了 `Subtract` 方法。// 定义一个委托类型。
2024-10-23 00:58:19
428
原创 C#初学-default关键字
在第一个例子中,我们使用 `default` 关键字来初始化 `zero`、`falseValue` 和 `nullString` 变量,分别得到 `int`、`bool` 和 `string` 类型的默认值。在这个例子中,`default` 关键字被用来声明一个局部变量 `number`,并且编译器根据赋值推断出其类型为 `int`。- 在 `switch` 语句中,`default` 用作一个 `case` 标签,表示当没有其他 `case` 匹配时执行的代码块。// 输出: (null)
2024-10-23 00:57:43
289
原创 C#初学-decimal关键字
然而,由于 `decimal` 类型的计算速度通常比 `float` 和 `double` 慢,因此在不需要高精度的情况下,可能会选择使用 `float` 或 `double`。- 在第一个例子中,我们定义了两个 `decimal` 类型的变量 `amount` 和 `taxRate`,并计算了税额 `taxAmount`。- 使用 `m` 后缀来表示字面量是 `decimal` 类型,这是必需的,因为如果不加 `m`,数字会被当作 `double` 类型处理。// 输出: Tax: 8.65192。
2024-10-23 00:57:05
540
原创 C#初学-continue关键字
`continue` 语句导致循环跳过当前迭代的剩余部分,即跳过 `Console.WriteLine(i)` 语句,直接进行下一次迭代。- **跳过当前迭代**:`continue` 关键字会导致当前迭代的剩余部分被跳过,并立即开始下一次迭代。- 使用 `if` 语句检查当前数字 `i` 是否为偶数,如果是,则执行 `continue` 语句。关键字 `continue` 在 C# 中用于跳过当前循环的当前迭代,并开始下一次迭代。- 在这个 `for` 循环中,我们遍历从 0 到 9 的数字。
2024-10-23 00:56:30
141
原创 C#初学-const关键字
在 C# 6.0 之后,还引入了 `readonly` 字段的概念,它在字段初始化时提供了更大的灵活性,例如可以在构造函数中赋值。- 在 `ConstantsDemo` 类中,我们使用 `const` 关键字声明了一个名为 `Pi` 的常量,其值为 `3.14159`。- **常量声明**:`const` 关键字用于声明一个常量,常量的值在编译时确定,并且在程序执行期间不能被修改。- 常量 `Pi` 被用于 `CalculateCircumference` 方法中,用于计算圆的周长。
2024-10-23 00:55:59
264
原创 C#初学-class关键字
在 `Main` 方法中,我们创建了 `Animal` 类和 `Dog` 类的实例,并调用了它们的 `MakeSound` 方法。这展示了多态性,即 `Dog` 类的实例调用 `MakeSound` 方法时,执行的是 `Dog` 类中重写的方法。- 在第一个例子中,我们定义了一个名为 `Animal` 的类,它有一个名为 `Name` 的公共属性和一个名为 `MakeSound` 的方法。- `Dog` 类继承自 `Animal` 类,并重写了 `MakeSound` 方法,提供了具体的实现。
2024-10-23 00:55:20
234
原创 C#初学-checked关键字
在第一个 `try-catch` 块中,我们使用 `checked` 关键字包围了可能发生溢出的代码。因为 `a` 已经是 `int` 类型的最大值,所以 `a + b` 会溢出,编译器会抛出 `OverflowException` 异常。- **溢出检查**:在 `checked` 关键字包围的代码块中,如果发生整数溢出,编译器会抛出 `OverflowException` 异常。- **默认行为**:在 C# 中,默认情况下,整数运算不会检查溢出,如果发生溢出,结果会被截断,而不是抛出异常。
2024-10-23 00:54:36
328
原创 C#初学-char关键字
最后,我们通过强制类型转换将 `char` 类型的 `letter` 转换为 `int` 类型,以获取其对应的 Unicode 码点值。- **范围**:`char` 类型的取值范围是从 `0` 到 `65535`,对应 Unicode 字符集中的码点。- 在第一个例子中,我们定义了一个 `char` 类型的变量 `letter` 并赋值为大写字母 'A'。- 使用 `char.IsUpper` 方法检查 `letter` 是否为大写字母,该方法返回一个布尔值。// 获取字符的Unicode码点。
2024-10-07 23:23:08
322
原创 C#初学-catch关键字
`finally` 块是可选的,它在 `try`-`catch` 结构完成后无论是否发生异常都会执行。- `catch (FormatException ex)` 块专门用于捕获 `FormatException` 异常,并输出异常信息。- 如果 `try` 块中抛出的是其他类型的异常,如 `OverflowException`,则相应的 `catch` 块将被执行。- **异常捕获**:`catch` 关键字用于 `try` 语句块之后,用于捕获在 `try` 块中抛出的异常。
2024-10-07 23:22:21
532
原创 C#初学-case关键字
在 `switch` 语句中,如果没有显式的 `break`,执行流程会“穿透”到下一个 `case`,直到遇到 `break` 或语句结束,这种现象称为“fall through”。- **条件分支**:在 `switch` 语句中,`case` 关键字后跟一个常量表达式,用于定义当 `switch` 表达式的值与该常量表达式匹配时应该执行的代码块。- **执行代码块**:匹配到 `case` 标签后,相应的代码块将被执行,直到遇到 `break` 语句或 `switch` 语句的结束。
2024-10-07 23:21:49
1024
原创 C#初学-byte关键字
如果需要表示负数,可以使用 `sbyte` 类型,它是 `byte` 的有符号对应类型。- 在第二个例子中,我们尝试将 `maxByte` 加1,这会导致溢出,因为 `byte` 类型的最大值是255。- 在第一个例子中,我们定义了两个 `byte` 类型的变量 `maxByte` 和 `minByte`,分别赋值为 `byte` 类型可能的最大值和最小值。- 然后我们计算这两个 `byte` 值的和,由于 `byte` 是无符号类型,所以结果仍然是一个 `byte` 类型的值。
2024-10-07 23:21:12
415
原创 C#初学-break关键字
**退出 `switch` 语句**:在 `switch` 语句中,`break` 关键字用于终止当前 `case` 的执行,并跳出整个 `switch` 语句。- 在第一个 `for` 循环的例子中,当变量 `i` 的值达到 5 时,`break` 语句被执行,循环立即终止。- **退出循环**:在 `for`、`while` 或 `do-while` 循环中,`break` 关键字用于立即终止当前循环的执行,并跳出循环体。// 没有break,会继续执行下一个case。
2024-10-07 16:30:29
648
原创 C#初学-bool关键字
在第二个 `if-else if-else` 结构中,使用了逻辑与运算符 `&&` 来组合两个布尔条件。只有当 `isRaining` 和 `haveUmbrella` 都为 `true` 时,才会执行第一个分支的代码。- 在 `while` 循环中,`shouldContinue` 变量用来控制循环是否继续执行。- **布尔类型**:`bool` 是布尔类型的缩写,用于存储逻辑值 `true` 或 `false`。- **逻辑运算**:布尔类型常用于逻辑运算,如条件判断、循环控制等。
2024-10-07 16:29:46
521
原创 C#初学-base关键字
由于 `MakeSound` 方法在 `Animal` 类中被声明为 `virtual`,在 `Dog` 类中被声明为 `override`,所以 `base.MakeSound()` 调用的是 `Animal` 类中的方法,而不是 `Dog` 类中的重写方法。- 在 `Main` 方法中创建 `Dog` 类的实例时,首先调用了基类 `Animal` 的构造函数,然后调用了 `Dog` 类的构造函数。- 在 `Dog` 类中,重写了 `MakeSound` 方法,并在构造函数中调用了基类的构造函数。
2024-10-07 16:19:37
640
原创 C#初学-as关键字
使用 `as` 关键字尝试将 `myAnimal` 转换为 `Dog` 类型。因为 `myAnimal` 实际上是一个 `Dog` 对象,所以转换成功,`myDog` 不为 `null`,可以调用 `Dog` 类的 `Bark` 方法。- 如果 `as` 转换失败(例如尝试将 `myAnimal` 转换为 `IList<int>`),它会返回 `null` 而不是抛出异常。- **显式类型转换**:与 `as` 相对的是强制类型转换(使用括号 `()` 包围目标类型),后者在转换失败时会抛出异常。
2024-10-07 16:18:50
929
原创 C#初学-abstract关键字
在 `Main` 方法中,我们创建了 `Dog` 和 `Cat` 的实例,并调用了它们的 `MakeSound` 方法,这展示了多态性,即同一个方法调用在不同的对象上可以有不同的行为。- `Dog` 和 `Cat` 类继承自 `Animal` 类,并分别实现了 `MakeSound` 方法,这样它们就可以被实例化了。- `Eat` 方法是一个普通方法,它在抽象类中定义,并在 `Dog` 和 `Cat` 的实例中被调用,展示了继承的特性。// 输出: The animal is eating.
2024-10-07 16:13:26
459
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人