提交 4f830289 编写于 作者: W wizardforcel

2020-07-09 20:32:39

上级 f81d43a0
......@@ -123,7 +123,7 @@ When we run the program, the output will be:
## 按位异或
按位异或运算符由`^`表示。 它对两个操作数的相应位执行按位异或操作。 如果相应的位与**相同**,则结果为`0`。 如果相应位的**与**不同,则结果为`1`
按位异或运算符由`^`表示。 它对两个操作数的相应位执行按位异或操作。 如果相应**相同**,则结果为`0`。 如果相应位不同,则结果为`1`
如果操作数的类型为`bool`,则按位异或运算等效于它们之间的逻辑异或运算。
......@@ -213,7 +213,7 @@ When we run the program, the output will be:
~26 = -27
```
当我们期望`229`时,得到-`27`作为输出。 **为什么会发生这种情况?**
当我们期望`229`时,得到`-27`作为输出。 **为什么会发生这种情况?**
发生这种情况是因为我们期望是`229`的二进制值`11100101`实际上是`-27`的 2 的补码表示。 计算机中的负数以 2 的补码表示形式表示。
......
......@@ -14,9 +14,9 @@ C# 中可用的预处理器指令为:
Preprocessor directives in C#
| 预处理程序指令 | 描述 | 句法 |
| --- | --- | --- |
| `#if` | 检查预处理器表达式是否为真 |
`#if`
检查预处理器表达式是否为真
```cs
#if preprocessor-expression
......@@ -24,8 +24,10 @@ Preprocessor directives in C#
#endif
```
|
| `#elif` | 与`#if`一起使用以检查多个预处理器表达式 |
`#elif`
`#if`一起使用以检查多个预处理器表达式
```cs
#if preprocessor-expression-1
......@@ -35,8 +37,10 @@ Preprocessor directives in C#
#endif
```
|
| `#else` | 与`#if`一起使用以创建复合条件指令。 |
`#else`
`#if`一起使用以创建复合条件指令。
```cs
#if preprocessor-expression
......@@ -46,8 +50,10 @@ Preprocessor directives in C#
#endif
```
|
| `#endif` | 与`#if`一起使用以指示条件指令的结尾 |
`#endif`
`#if`一起使用以指示条件指令的结尾
```cs
#if preprocessor-expression
......@@ -55,43 +61,55 @@ Preprocessor directives in C#
#endif
```
|
| `#define` | 用于定义符号 |
`#define`
用于定义符号
```cs
#define SYMBOL
```
|
| `#undef` | 用于取消定义符号 |
`#undef`
用于取消定义符号
```cs
#undef SYMBOL
```
|
| `#warning` | 允许我们从代码中生成 1 级警告 |
`#warning`
允许我们从代码中生成 1 级警告
```cs
#warning warning-message
```
|
| `#error` | 允许我们从代码中生成错误 |
`#error`
允许我们从代码中生成错误
```cs
#error error-message
```
|
| `#line` | 允许我们修改编译器的行号和文件名以显示错误和警告 |
`#line`
允许我们修改编译器的行号和文件名以显示错误和警告
```cs
#line line-number file-name
```
|
| `#region` | 允许我们创建一个使用 Visual Studio 代码编辑器时可以扩展或折叠的区域 |
`#region`
允许我们创建一个使用 Visual Studio 代码编辑器时可以扩展或折叠的区域
```cs
#region region-description
......@@ -99,8 +117,10 @@ Preprocessor directives in C#
#endregion
```
|
| `#endregion` | 指示区域的结尾 |
`#endregion`
指示区域的结尾
```cs
#region region-description
......@@ -108,14 +128,16 @@ Preprocessor directives in C#
#endregion
```
|
| `#pragma` | 为编译器提供特别的说明,以编译其中出现的文件。 |
`#pragma`
为编译器提供特别的说明,以编译其中出现的文件。
```cs
#pragma pragma-name pragma-arguments
```
|
* * *
......@@ -124,13 +146,13 @@ Preprocessor directives in C#
* `#define`指令允许我们定义符号。
*`#if`伪指令一起使用时定义的符号将求值为`true`
* 这些符号可用于指定编译条件。
* **语法:**
* **语法**
```cs
#define SYMBOL
```
* **例如:**
* **例如**
```cs
#define TESTING
......@@ -144,7 +166,7 @@ Preprocessor directives in C#
* `#undef`指令允许我们取消定义符号。
*`#if`伪指令一起使用时,未定义的符号将计算为`false`
* **语法:**
* **语法**
```cs
#undef SYMBOL
......@@ -166,7 +188,7 @@ Preprocessor directives in C#
* 预处理器表达式可以仅由符号组成,也可以由符号的组合以及`&&`(AND),`||`(OR),`!`(NOT)等运算符组成。
* `#if`指令后跟`#endif`指令。
* 仅当使用`#if`测试的表达式的值为`true`时,才会编译`#if`指令中的代码。
* **语法:**
* **语法**
```cs
#if preprocessor-expression
......@@ -174,7 +196,7 @@ Preprocessor directives in C#
#endif
```
* **例如:**
* **例如**
```cs
#if TESTING
......@@ -218,7 +240,7 @@ CSHARP is defined
* `#elif`指令与`#if`指令一起使用,可让我们创建复合条件指令。
* 在测试多个预处理器表达式时使用它。
* 仅当用`#elif`测试的表达式的值为真时,才编译`#elif`指令中的代码。
* **语法:**
* **语法**
```cs
#if preprocessor-expression-1
......@@ -228,7 +250,7 @@ CSHARP is defined
#endif
```
* **例如:**
* **例如**
```cs
#if TESTING
......@@ -244,7 +266,7 @@ CSHARP is defined
* `#else`指令与`#if`指令一起使用。
* 如果前面的`#if``#elif`指令(如果存在)中的表达式都不为真,则将编译`#else`指令中的代码。
* **语法:**
* **语法**
```cs
#if preprocessor-expression-1
......@@ -256,7 +278,7 @@ CSHARP is defined
#endif
```
* **例如:**
* **例如**
```cs
#if TESTING
......@@ -273,7 +295,7 @@ CSHARP is defined
## `#endif`指令
* `#endif`指令与`#if`指令一起使用以指示`#if`指令的结尾。
* **语法:**
* **语法**
```cs
#if preprocessor-expression-1
......@@ -281,7 +303,7 @@ CSHARP is defined
#endif
```
* **例如:**
* **例如**
```cs
#if TESTING
......@@ -330,13 +352,13 @@ CSHARP is defined, PYTHON is undefined
## `#warning`指令
* `#warning`指令允许我们从代码中生成用户定义的一级警告。
* **语法:**
* **语法**
```cs
#warning warning-message
```
* **例如:**
* **例如**
```cs
#warning This is a warning message
......@@ -380,13 +402,13 @@ Program.cs(10,26): warning CS1030: #warning: 'CSHARP is undefined' [/home/myuser
## `#error`指令
* `#error`指令允许我们从代码中生成用户定义的错误。
* **语法:**
* **语法**
```cs
#error error-message
```
* **例如:**
* **例如**
```cs
#error This is an error message
......@@ -428,13 +450,13 @@ The build failed. Please fix the build errors and run again.
## `#line`指令
* `#line`指令允许我们修改行号和文件名以获取错误和警告。
* **语法:**
* **语法**
```cs
#line line-number file-name
```
* **例如:**
* **例如**
```cs
#line 50 "fakeprogram.cs"
......@@ -475,7 +497,7 @@ arp/directive-project/directive-project.csproj]
* 该指令仅用于组织代码。
* `#region`块不能与`#if`块重叠。 但是,`#region`块可以包含在`#if`块内,并且`#if`块可以与`#region`块重叠。
* `#endregion`指令指示`#region`块的结尾。
* **语法:**
* **语法**
```cs
#region region-description
......@@ -525,13 +547,13 @@ Hello
* C# 支持两条`#pragma`指令:
* `#pragma warning`:用于禁用或启用警告
* `#pragma checksum`:它生成用于调试的源文件的校验和。
* **语法:**
* **语法**
```cs
#pragma pragma-name pragma-arguments
```
* **例如:**
* **例如**
```cs
#pragma warning disable
......@@ -563,7 +585,7 @@ When we run the program, the output will be:
Program.cs(12,22): warning CS1030: #warning: 'This is a warning 2' [/home/myuser/csharp/directive-project/directive-project.csproj]
```
我们可以看到在输出屏幕上仅显示**第二警告**
我们可以看到在输出屏幕上仅显示**第二警告**
这是因为,我们最初禁用了第一个警告之前的所有警告,而仅在第二个警告之前将它们还原。 这就是隐藏第一个警告的原因。
......
......@@ -4,9 +4,9 @@
#### 在本教程中,我们将学习命名空间,如何定义它,访问其成员以及在 C# 程序中使用它。
命名空间在 C# 中用于组织和提供一定程度的代码分离。 可以将它们视为包含其他名称空间,类等的容器。
命名空间在 C# 中用于组织和提供一定程度的代码分离。 可以将它们视为包含其他命名空间,类等的容器。
名称空间可以具有以下类型作为其成员:
命名空间可以具有以下类型作为其成员:
1. 命名空间(嵌套命名空间)
2. 班级
......@@ -14,21 +14,21 @@
4. 结构体
5. 代表们
我们将在以后的教程中讨论这些主题。 现在,我们将坚持使用类和名称空间。
我们将在以后的教程中讨论这些主题。 现在,我们将坚持使用类和命名空间。
命名空间在 C# 程序中不是必需的,但在编写更简洁的代码和管理较大的项目中,它们确实起着重要的作用。
让我们了解实际场景中名称空间的概念。 我们的计算机中有大量文件和文件夹。 想象一下,如果将它们放在单个目录中将很难管理它们。 这就是为什么我们将相关文件和文件夹放在单独的目录中的原因。 这有助于我们正确管理数据。
让我们了解实际场景中命名空间的概念。 我们的计算机中有大量文件和文件夹。 想象一下,如果将它们放在单个目录中将很难管理它们。 这就是为什么我们将相关文件和文件夹放在单独的目录中的原因。 这有助于我们正确管理数据。
命名空间的概念在 C# 中类似。 通过将相关成员放在同一名称空间中,它可以帮助我们**组织**不同的成员。
命名空间的概念在 C# 中类似。 通过将相关成员放在同一命名空间中,它可以帮助我们**组织**不同的成员。
命名空间还解决了**命名冲突**的问题。 当放在不同名称空间中的两个或多个类可以具有相同的名称。
命名空间还解决了**命名冲突**的问题。 当放在不同命名空间中的两个或多个类可以具有相同的名称。
* * *
## 在 C# 中定义命名空间
我们可以使用*名称空间*关键字在 C# 中定义一个名称空间:
我们可以使用*命名空间*关键字在 C# 中定义一个命名空间:
```cs
namespace Namespace-Name
......@@ -53,13 +53,13 @@ namespace MyNamespace
}
```
在上面的示例中,创建了名称空间`MyNamespace`。 它由一个类`MyClass`作为其成员。`MyMethod``MyClass`类的方法。
在上面的示例中,创建了命名空间`MyNamespace`。 它由一个类`MyClass`作为其成员。`MyMethod``MyClass`类的方法。
* * *
## 在 C# 中访问命名空间的成员
可以使用`dot(.)`运算符访问名称空间的成员。 访问名称空间成员的语法是:
可以使用`dot(.)`运算符访问命名空间的成员。 访问命名空间成员的语法是:
```cs
Namespace-Name.Member-Name
......@@ -109,7 +109,7 @@ namespace MyProgram
Creating my namespace
```
在上面的程序中,我们创建了自己的名称空间`MyNamespace`并从`MyClass`中的`Main()`方法访问其成员。 如前所述,`dot (.)`运算符用于访问名称空间的成员。
在上面的程序中,我们创建了自己的命名空间`MyNamespace`并从`MyClass`中的`Main()`方法访问其成员。 如前所述,`dot (.)`运算符用于访问命名空间的成员。
`Main()`方法中,使用`dot (.)`运算符调用`myMethod()`方法。
......@@ -117,7 +117,7 @@ Creating my namespace
## 在 C# 中使用命名空间【使用关键字】
可以使用`using`关键字在程序中包含名称空间。 语法是
可以使用`using`关键字在程序中包含命名空间。 语法是
```cs
using Namespace-Name;
......@@ -129,7 +129,7 @@ using Namespace-Name;
using System;
```
这种方法的优点是,我们不必在每次访问该名称空间时都为其指定完全限定名称。
这种方法的优点是,我们不必在每次访问该命名空间时都为其指定完全限定名称。
一旦行
......@@ -153,9 +153,9 @@ System.Console.WriteLine("Hello World!");
## C# 中的嵌套命名空间
一个名称空间可以包含另一个名称空间。 它称为嵌套名称空间。 嵌套的名称空间及其成员也可以使用`dot (.)`运算符进行访问。
一个命名空间可以包含另一个命名空间。 它称为嵌套命名空间。 嵌套的命名空间及其成员也可以使用`dot (.)`运算符进行访问。
创建嵌套名称空间的语法如下:
创建嵌套命名空间的语法如下:
```cs
namespace MyNamespace
......@@ -208,6 +208,6 @@ When we run the program, the output will be:
Nested Namespace Example
```
此示例说明了如何在 C# 中实现嵌套名称空间。
此示例说明了如何在 C# 中实现嵌套命名空间。
在这里,我们现在在`MyNamespace`内部有一个名为`Nested`的额外名称空间。 因此,我们不必使用`MyNamespace.SampleClass.myMethod()`,而必须使用`MyNamespace.Nested.SampleClass.myMethod()`
\ No newline at end of file
在这里,我们现在在`MyNamespace`内部有一个名为`Nested`的额外命名空间。 因此,我们不必使用`MyNamespace.SampleClass.myMethod()`,而必须使用`MyNamespace.Nested.SampleClass.myMethod()`
\ No newline at end of file
......@@ -4,11 +4,11 @@
#### 在本文中,我们将学习如何以及为什么在 C# 中实现部分类和部分方法。
在很多情况下,您可能需要拆分类定义,例如在处理大型项目时,可能需要多个开发人员和程序员同时处理同一个类。 在这种情况下,我们可以使用称为 **Partial Class** 的功能。
在很多情况下,您可能需要拆分类定义,例如在处理大型项目时,可能需要多个开发人员和程序员同时处理同一个类。 在这种情况下,我们可以使用称为**部分类**的功能。
* * *
## 部分课程简介
## 部分简介
在使用 C# (或 OOP)进行编程时,我们可以将类的定义划分为两个或多个源文件。 源文件包含类定义的一部分,并且在编译应用程序时将所有部分组合在一起。 为了拆分类定义,我们需要使用`partial`关键字。
......@@ -88,7 +88,7 @@ namespace HeightWeightInfo
### 部分类要记住的事情
`partial`关键字指定可以在名称空间中定义类的其他部分。 如果我们要使一个类成为局部类,则必须使用`partial`关键字。 类的所有部分都应该在相同的名称空间中,并在编译时可用以形成最终类型。 所有部分都必须具有相同的访问修饰符,即私有,公共等。
`partial`关键字指定可以在命名空间中定义类的其他部分。 如果我们要使一个类成为局部类,则必须使用`partial`关键字。 类的所有部分都应该在相同的命名空间中,并在编译时可用以形成最终类型。 所有部分都必须具有相同的访问修饰符,即私有,公共等。
* 如果任何部分被声明为抽象的,则整个类型被认为是抽象的。
* 如果任何部分声明为密封的,则整个类型都视为密封的。
......@@ -96,7 +96,7 @@ namespace HeightWeightInfo
* 在部分定义中声明的任何类成员都可用于所有其他部分。
* 局部类的所有部分都应位于同一命名空间中。
****注意:** `partial`修饰符不适用于委托或枚举声明
**注意**`partial`修饰符不适用于委托或枚举声明
* * *
......
......@@ -45,9 +45,9 @@ Hello World!
2. `namespace HelloWorld{...}`
`namespace`关键字用于定义我们自己的名称空间。 在这里,我们创建一个名为`HelloWorld`的命名空间。
`namespace`关键字用于定义我们自己的命名空间。 在这里,我们创建一个名为`HelloWorld`的命名空间。
只是将名称空间视为由类,方法和其他名称空间组成的容器。 要获得名称空间的详细概述,*请访问* [C# 命名空间](/csharp-programming/namespaces "C# namespaces")。
只是将命名空间视为由类,方法和其他命名空间组成的容器。 要获得命名空间的详细概述,*请访问* [C# 命名空间](/csharp-programming/namespaces "C# namespaces")。
3. `class Hello{...}`
......
......@@ -110,7 +110,7 @@ value = 5;
1. 选择一个有意义的变量名。 例如,`name``age``主题``n``a``s`更有意义。
2. 使用 **camelCase** 表示法(以小写字母开头)来命名局部变量。 例如,`的学生人数``age`等。
3. 使用 **PascalCase****CamelCase** (以大写字母开头)来命名公共成员变量。 例如,`名字``价格`等。
4. 使用前导下划线(_)后跟 **camelCase** 表示法来命名私有成员变量。 例如,`_bankBalance``_emailAddress`等。
4. 使用前导下划线(`_`)后跟 **camelCase** 表示法来命名私有成员变量。 例如,`_bankBalance``_emailAddress`等。
您可以在处了解有关 C# 中[命名约定的更多信息](https://softwareengineering.stackexchange.com/questions/209532/naming-convention-of-variables-in-c-programming-language)
......@@ -120,7 +120,7 @@ value = 5;
## C# 基本数据类型
C# 中的变量大致分为两种类型**值类型****引用类型**。 在本教程中,我们将讨论作为值类型的子类的原始(简单)数据类型。
C# 中的变量大致分为两种类型**:值类型****引用类型**。 在本教程中,我们将讨论作为值类型的子类的原始(简单)数据类型。
参考类型将在以后的教程中介绍。 但是,如果您想了解更多有关变量类型的信息,请访问 [C# 类型和变量](https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/types-and-variables)(官方 C# 文档)。
......@@ -155,11 +155,11 @@ True
* * *
### 带符号积分
### 带符号整数
这些数据类型保存整数值(正数和负数)。 在所有可用位中,一位用于符号。
**1.字节**
**1.`sbyte`**
* **大小**:8 位
* **范围**:-128 至 127。
......@@ -192,7 +192,7 @@ When we run the program, the output will be:
* * *
**2.**
**2.`short`**
* **大小**:16 位
* **范围**:-32,768 至 32,767
......@@ -223,7 +223,7 @@ When we run the program, the output will be:
* * *
**3\. int**
**3\. `int`**
* **大小**:32 位
* **范围**:-231 至 231-1
......@@ -254,7 +254,7 @@ When we run the program, the output will be:
* * *
**4.**
**4.`long`**
* **大小**:64 位
* **范围**:-263 至 263-1
......@@ -289,7 +289,7 @@ When we run the program, the output will be:
这些数据类型仅保留等于或大于 0 的值。当我们确定不会有负值时,通常使用这些数据类型来存储值。
**1.字节**
**1.`byte`**
* **大小**:8 位
* **范围**:0 到 255。
......@@ -320,7 +320,7 @@ When we run the program, the output will be:
* * *
**2\. ushort**
**2\. `ushort`**
* **大小**:16 位
* **范围**:0 到 65,535
......@@ -351,7 +351,7 @@ When we run the program, the output will be:
* * *
**3\. uint**
**3\. `uint`**
* **大小**:32 位
* **范围**:0 到 232-1
......@@ -382,7 +382,7 @@ When we run the program, the output will be:
* * *
**4\. ulong**
**4\. `ulong`**
* **大小**:64 位
* **范围**:0 到 264-1
......@@ -417,7 +417,7 @@ When we run the program, the output will be:
这些数据类型保存浮点值,即包含十进制值的数字。 例如 12.36,-92.17 等。
**1.浮动**
**1.`float`**
* 单精度浮点型
* **大小**:32 位
......@@ -449,7 +449,7 @@ When we run the program, the output will be:
* * *
**2.**
**2.`double`**
* 双精度浮点类型。 [单精度和双精度浮点有什么区别?](https://stackoverflow.com/questions/801117/whats-the-difference-between-a-single-precision-and-double-precision-floating-p)
* **大小**:64 位
......@@ -481,7 +481,7 @@ When we run the program, the output will be:
* * *
### 字符(字符)
### `char`(字符)
* 它代表一个 16 位 unicode 字符。
* **大小**:16 位
......@@ -518,7 +518,7 @@ x
* * *
### 十进制
### `decimal`
* 与浮点类型(双精度和浮点型)相比,十进制类型具有更高的精度和更小的范围。 因此,它适合进行货币计算。
* **大小**:128 位
......
......@@ -56,7 +56,7 @@ Second Number = 10
这是一个简单的示例,演示了赋值运算符的用法。
您可能已经注意到在示例中使用了大括号`{ }`。 我们将以*字符串格式*讨论它们。 现在,请记住,`{0}`被字符串后面的第一个变量替换,`{1}`被第二个变量替换,依此类推。
您可能已经注意到在示例中使用了大括号`{ }`。 我们将以*字符串格式*讨论它们。 现在,请记住,`{0}`被字符串后面的第一个变量替换,`{1}`被第二个变量替换,依此类推。
* * *
......@@ -75,12 +75,12 @@ int z = x + y;// z = 15
C# Arithmetic Operators
| 运算符 | 运算符名称 | 例 |
| 运算符 | 运算符名称 | 例 |
| --- | --- | --- |
| `+` | 加法运算符 | `6 + 3`等于 9 |
| `-` | 减法运算符 | `10 - 6`计算为 4 |
| `*` | 乘法运算符 | `4 * 2`计算为 8 |
| `/` | 除法运算符 | `10 / 5`计算为 2 |
| `-` | 减法运算符 | `10 - 6`等于 4 |
| `*` | 乘法运算符 | `4 * 2`等于 8 |
| `/` | 除法运算符 | `10 / 5`等于 2 |
| `%` | 模运算符(余数) | `16 % 3`等于 1 |
### 示例 2:算术运算符
......@@ -148,11 +148,11 @@ result = firstNumber - 3.2; // result will hold 11.2
C# Relational Operators
| Operator | Operator Name | Example |
| 运算符 | 运算符名称 | 示例 |
| --- | --- | --- |
| `==` | 等于 | `6 == 4`计算为`false` |
| `>` | 大于 | `3 > -1`求值`true` |
| `<` | 小于 | `5 < 3`求值`false` |
| `>` | 大于 | `3 > -1`计算`true` |
| `<` | 小于 | `5 < 3`计算`false` |
| `>=` | 大于或等于 | `4 >= 4`计算为`true` |
| `<=` | 小于或等于 | `5 <= 3`计算为`false` |
| `!=` | 不等于 | `10 != 2`计算为`true` |
......@@ -267,10 +267,10 @@ False
C# unary operators
| Operator | Operator Name | 描述 |
| 运算符 | 运算符名称 | 描述 |
| --- | --- | --- |
| `+` | 一元加 | 保留操作数的原样 |
| `-` | 一元减 | 反转操作数的符号 |
| `+` | 一元加 | 保留操作数的原样 |
| `-` | 一元减 | 反转操作数的符号 |
| `++` | 递增 | 值增加 1 |
| `--` | 递减 | 递减值 1 |
| `!` | 逻辑否定(非) | 反转布尔值 |
......@@ -421,14 +421,14 @@ When we run the program, the output will be:
C# Bitwise and Bit Shift operators
| Operator | Operator Name |
| 运算符 | 运算符名称 |
| --- | --- |
| ~ | 按位补码 |
| & | 按位与 |
| &#124; | 按位或 |
| ^ | 按位异或 |
| < < | 按位左移 |
| > > | 按位右移 |
| `~` | 按位补码 |
| `&` | 按位与 |
| <code>&#124;</code> | 按位或 |
| `^` | 按位异或 |
| `<<` | 按位左移 |
| `>>` | 按位右移 |
### 例 8:按位和移位操作
......@@ -486,7 +486,7 @@ When we run the program, the output will be:
C# Compound Assignment Operators
| Operator | Operator Name | Example | 相当于 |
| 运算符 | 运算符名称 | 示例 | 相当于 |
| --- | --- | --- | --- |
| `+=` | 加法赋值 | `x += 5` | `x = x + 5` |
| `-=` | 减法赋值 | `x -= 5` | `x = x - 5` |
......
......@@ -93,8 +93,8 @@ System.Console.WriteLine("Hello");
除了声明和表达式语句外,还有:
* 选择语句(`if...else``switch`
* 迭代语句(`foreach`中执行,同时执行
* 跳转语句(中断,继续,跳转,返回,收益
* 迭代语句(`foreach``while`
* 跳转语句(`break``continue``goto``return``yield`
* *异常处理*语句(`throw``try-catch``try-finally``try-catch-finally`
这些语句将在以后的教程中讨论。
......
......@@ -172,4 +172,4 @@ Console.WriteLine("Hello World");
* 而是应在程序中使用注释来解释复杂的算法和技术。
* 评论应简短,切题而不是冗长的描述。
* 根据经验,最好使用注释解释**为什么**而不是**为何**
\ No newline at end of file
* 根据经验,最好使用注释解释**为什么**而不是**做什么**
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册