在上篇文章中,你跟着我写了一个HelloWorld,本篇中,我们来谈谈一些C#程序中的小概念
一个 C# 程序主要包括以下部分:
- 命名空间声明(Namespace declaration)
- 一个类(class)
- Class 方法
- Class 属性
- 一个 Main(主)方法
- 语句(Statements)& 表达式(Expressions)
- 注释
我们把上一篇的代码添出来
1 using System; 2 3 namespace HelloWorld 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 Console.Write("HelloWorld"); 10 Console.Read(); 11 } 12 } 13 }
程序的第1行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句
下一行namespace HelloWorld - namespace关键字用于申明命名空间,一个命名空间里有多个类。本代码中,表示一个为HelloWorld的命名空间
下一行class Program - class关键字用于申明一个类,类 Program 包含了程序使用的数据和方法声明。类一般包含多个方法。方法定义了类的行为。在这里,Program 类只有一个 Main 方法。
下一行定义了 Main 方法,是所有 C# 程序的 入口点。Main 方法说明当执行时 类将做什么动作。
注释是用于解释代码。编译器会忽略注释的条目。在 C# 程序中,多行注释以 /* 开始,并以字符 */ 终止,如下所示:
/* 这是C#中 的多行注释的 演示 */
单行注释是用 '//' 符号表示。例如:
//这是C#中的单行注释的演示
标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:
- 标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。
- 标识符中的第一个字符不能是数字。
- 标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' / 。
- 标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
- 标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
- 不能与C#的类库名称相同。
关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀。
在 C# 中,有些标识符在代码的上下文中有特殊的意义,如 get 和 set,这些被称为上下文关键字(contextual keywords)。
下表列出了 C# 中的保留关键字(Reserved Keywords)和上下文关键字(Contextual Keywords):
保留关键字
上下文关键字
详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/
C#是一种强类型语言。 每个变量和常量都有一个类型,每个计算为值的表达式也是如此,每个方法签名为每个输入参数和返回值指定一个类型。所有的类型都是继承自System.Object
C#的数据类型有三种:
- 值类型(Value types)
- 引用类型(Reference types)
- 指针类型(Pointer types)
在不安全的代码里才会用到指针类型,本系列不介绍。你仅要知道,指针类型不从 object 继承,并且指针类型与 object 之间不存在转换。 此外,装箱和取消装箱不支持指针。 但是,你可在不同的指针类型之间以及指针类型和整型之间进行转换。(这句话记不住也没有关系,这个类型在绝大部分的工作中都用不上,个人认为,这个类型就是为了给c++程序员用的,个人观点不喜勿喷!)。后面我们也会有单独的章节去讲,这里你不必太纠结,心里有这些概念就行了。
详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/types
一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作。
C# 中变量定义的语法:
<data_type> <variable_list>;
在这里,data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。
定义变量示例:
int i,j; char c; string mrbug;
变量通过在等号后跟一个常量表达式进行初始化(又叫赋值)。初始化的一般形式为:
<data_type> <variable_name> = value;
一些示例:
int i = 0 , j = 100; //初始化 i 和 j string myname = "mrbug" ; //初始化myname
定义变量时就为这个变量赋一个初始值,是一个良好的编码习惯
顾名思意常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。
常量可以被当作常规的变量,只是它们的值在定义后不能被修改。在C#中,常量以下面的形式定义:
const <data_type> <constant_name> = value;
定义常量示例:
const double pi = 3.1415926; // 常量声明
详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/constants
C# 中的两种表达式:
- lvalue:lvalue 表达式可以出现在赋值语句的左边或右边。
- rvalue:rvalue 表达式可以出现在赋值语句的右边,不能出现在赋值语句的左边。
左值(lvalue)是指在单个表达式的外部保留的对象。 可以将左值视为具有名称的对象。 所有变量(包括不能更改的 (const
) 变量)都是左值。 左值是一个不在使用它的表达式的外部保留的临时值。
数值是 rvalue 的,因此不能被赋值,不能出现在赋值语句的左边。下面是一个有效的语句:
int x = 3 + 4;
在此示例中,x 是左值,因为它在定义它的表达式的外部保留。 表达式 3 + 4 是为一个右值,因为其计算结果为不在定义它的表达式的外部保留的临时值。
命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:
namespace namespace_name { // 代码声明 }
using 关键字表明程序使用的是给定命名空间中的名称。例如,我们在程序中使用 System 命名空间,其中定义了类 Console。我们可以只写:
Console.WriteLine ("Hello world");
我们可以写完全限定名称,如下:
System.Console.WriteLine("Hello world");
在C#中,命名空间可以被嵌套,即您可以在一个命名空间内定义另一个命名空间,如下所示:
namespace namespace_name1 { // 代码声明 namespace namespace_name2 { // 代码声明
int age = 18 ;
} }
在C#中,你可以使用点(.)运算符访问嵌套的命名空间的成员,例如上例中你可以这样使用:
namespace_name1.namespace_name2.age = 30 ;
详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/namespace