Essential.C#介绍C#(1)

    C#是相对较新的语言,它是建立在C风格语言基础上(C,C++和JAVA),对于许多有经验的程序员可以立刻熟悉它。有十分复杂的执行平台叫做通用语言架构(CLI),C#是用来构建软件组件和应用的编程语言。

image

    本章介绍使用C#产生典型的HelloWorld程序。这一章的中心是C#基本语法,包括在C#可执行程序中定义入口点。这将让你熟悉C#语法和结构,并且让你执行这个最简单的C#程序。首先会讨论C#在执行方面基本语法,这将讲解C#程序时如何运行的。本章结束时会讨论变量声明,向控制台输入输出数据,还有在C#中如何注释。

Hello, World

    学习新的编程语言的最好办法就是写代码。第一个例子就是典型的HelloWorld程序。在这个程序中,你将在屏幕上显示一些文本。

    清单1.1是完整的Helloworld程序,在随后的小节,你就可以编译此段代码。

清单1.1 HelloWorld

class HelloWorld
{
    static void Main()
    {
        System.Console.WriteLine("Hello,My Name is Inigo Montoya");
    }
}
注意:
C#是大小写敏感语言。只有代码的大小写正确了才能编译成功。


    对于熟练的Java,C或C++程序员可以立刻看出相似处。就像JAVA,C#的基本语法是源自C和C++。语法标点(比如分号和花括号),特征(比如大小写敏感),还有关键字(比如,class,public,void)这些都是很相似的。新手和其他语言的程序员都能很快的发现这些明显的构成!

编译并运行程序

    C#编译器不限制文件扩展名,只要它包含C#源码,不过.CS是默认扩展名。当将源代码保存到文件后,开发者必须编译它(附录A提供了安装编译器的指南)。由于C#并没有标准化命令行指令,所以编译指令时依赖不同C#编译器实现的。

    你可以将清单1.1写入一个文件并命名为HelloWorld.cs。然后就像输出1.1那样,在控制台使用微软.Net编译器编译(假设你已经为编译器指定了合适的路径)!

输出1.1

>csc.exe HelloWorld.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.21022.8
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

不同的编译器版本会有不同的输出。

    编译程序后生成HelloWorld.exe。如输出1.2显示

输出1.2

>HelloWorld.exe
Hello. My name is Inigo Montoya.

   由C#编译器产生的HelloWorld.exe程序,也叫做程序集(assembly)。而不是建立一个可独立运行的完整程序。开发者可以创建一个可被别人引用的代码库,大的程序库(或类库)使用.dll作为扩展名。这是标准的动态链接库(DLL)。一个库文件也是一个程序集。换句话说,C#是从程序集中输出结果,而不管那是程序还是库!

语言对比:Java——文件名必须匹配类名
在Java中,文件名必须和类名一样。而在C#中,这只是沿用此惯例但不强制使用,C#开始可以有两个类在同一个文件中。出现。C#2.0可以让一个类跨越多个文件。

C#基本语法

    一旦你成功编译并运行了HelloWorld程序,你就要准备剖析代码,来学习它的每一部分。首先,看看C#程序员可以选择使用的标示符关键字(First, consider the C# keywords along with the identifiers that the developer chooses)。

关键字

    为了编译器能解释代码,C#肯定需要指定一些单词来表达特殊的状态和意思。这就叫关键字保留字。并且为编译器提供了语法来解释程序员书写的表达式。在HelloWorld程序中,class,static,void都是关键字。

    编译器通过关键字来识别代码的结构。由于编译器严格按照这些词解释,因此你只能在特定规则的编程语言下使用这些关键字。换句话说,编写程序需要开发者在某些特定的位置书写。当程序员违反了这些规则,编译器就会丢出错误信息。

C#关键字

下表是C#中使用的关键字

表1.1

abstract               add*               as                  ascending*
base                    bool                break              by*
byte                    case               catch               char
checked               class                const              continue
decimal                default             delegate          do
double                 descending*     else                enum
event                   explicit             extern            false
finally                   fixed               from*             float
for                       foreach            get*               group*
goto                     if                    implicit            in
int                        into*               interface         internal
is                         lock                 long                join*
let*                      namespace       new                null
object                  operator           orderby*         out
override                params            partial*            private
protected              public              readonly           re
remove*               return              sbyte               sealed
select*                  set*               short               sizeof
stackalloc              static               string               struct
switch                   this                 throw               true
try                        typeof             uint                  ulong
unchecked             unsafe             ushort              using
value*                   virtual              void                 volatile
where*                  while                yield*

*表示和上下文相关的

    C#1.0后就没有引入新的关键字。不过,随后的一些版本构建了上下文关键字,它只在特定对的位置才有意义,而在指定的位置之外,上下文关键字没有任何意思。所以C#1.0的代码都可以被之后的版本编译(表1.1中的*就表示上下文关键字)。

标示符

    在C#中除了定义关键字,开发者可以使用自己名字。编程语言所引用的这这些名字叫标示符用来识别程序员构建的代码。在清单1.1的HelloWorld中,Main就是一个标示符。By assigning an identifier, it is possible to refer back to the same construct using the identifier。这一点很重要,所以,程序员分配名字要有一定目的,而不是随意使用。作为一个合格的程序员要具有选择一个简洁直观的字符作为标示符,因为这会让最终代码容易理解并重用。因为一些极少出现的原因,某些标示符,比如C#中的Main,具有特别的意思。

类型定义

    C#中的所有代码都包含在一个类型定义中,这是最常用的类型定义,它是关键字class。class定义是通常由class<标示符>{…}开始的一段代码。看看清单1.2的展示

清单1.2 基本类定义
——————————————
class HelloWorld

{
    …
}
——————————————

    类型名可以使随意定义(在这里是,HelloWorld),但是习惯上,它应该首字母大写。如果名字中包含多个单词,每个单词的首字母也应该大写。对于这个例子,也可以是这些名字,Greetings,HelloInigoMontoya,或是简单的Hello。编写CLI的人称这种方式是Pascal式样。因为在Pascal语言中通常这样使用。还有另一种选择,驼峰式样,除了第一个单词的首字母小写以为和上面的式样是一样的。比如quotient,firstName,theDreadPirateRoberts。

    通常,一个程序会包含多个类型,每个类型包含多个方法。

Main

什么是方法

    在语法上,C#中的方法是一个被方法声明命名的代码块(比如,static void Main())并且在花括号中有0个或更多描述段。方法执行计算或动作。就像写一段话,方法将代码组织到一起,以便更容易阅读。更为重要的是,方法避免了代码复制。方法声明是描述方法,并定义数据在此方法上传输的方法名。清单1.3中, Main(){…} 就是一个方法。

    C#程序开始执行与static void Main().当你在控制台上键入Helloworld.exe,程序开始执行,定位到Main后,开始执行第一个段落。

清单1.3 分解Helloworld
————————————————————image

————————————————————
尽管Main的方法声明在一定程度上可以有些不同。static,方法名称,Main这几个东西都是必须的

Main方法的声明

也许需要定义无参数或有返回值得Main方法.C#支持这两种定义,就像清单1.4声明了完整的Main方法.

清单1.4 带参数和返回值得Main方法
——————————————————————
static int Main(string[] args)
{
     …
}
——————————————————————

    参数args是一个对应命名行的字符串数组,不过,这不像C或C++中,头一个参数不是程序名称,而是命令行的第一个命令。为了用命令行控制程序需要引用System.Environment.CommandLine。

    整型的返回值是标志码,用来指示程序是否执行成功。非零的值,表示产生的错误。

语言对比:C++/Java——是全小写
不像别的C风格的老前辈,C#在Main方法上使用了大写的M,以便符合Pascal风格的C#惯例。

    Main方法的Static是指示直接调用此方法,而不用定义类。如果没有static,当控制台运行这个程序时,需要做一些附加的工作(称为初始化,第五章详细讲解了static方法)

    Main方法前面的void指示此方法不需要返回任何数据(这将在第二章解释)

    C#和C/C++相同都使用花括号构成方法体或类体。比如,main方法在花括号中包含了实现。在这里,方法中只有一个语句。

语句和语句分隔符

    Main方法包含了一个简单的语句,System.Console.WriteLine(),这是用来想控制台输出一行文字。C#通常使用分号来标示一个语句的结束。一个语句是由一个或多个动作组成。声明一个变量,控制程序流向,调用方法的子语句。

语言对比:VisualBasic——基于行的语句
有些语言是基于行的,意思是在没有特别的解释时,语句是不能跨行的。VB就是基于行的语言。它需要在一行末尾使用下划线来指示一个语句被分割成多行。

没有分号的语句

    所有C#语句末尾都要使用分号。但switch语句段就不能包含分号。因为在switch语句段中已经包含了花括号。C#不需要在语句后跟随分号。事实上,In fact, code blocks themselves are considered statements (they are also composed of statements)and don’t require closure using a semicolon

    由于创建新行并不能分隔语句,你就可以将多个语句放在一行,而C#编译器将把这一行解释成多条指令。比如,清单1.5在一行内包含两个语句。分别在两行显示UP和Down

清单1.5 在一行内的多语句
———————————————————————————————————
system.Console.WriteLine(“Up”);System.Console.WriteLine(“Down”);
———————————————————————————————————

    C#也允许将一个语句分割成多行。C#编译器通过查找分号来确认一个完整语句(如清单1.6所示)

清单1.6 一个语句分割成多行
———————————————————————————————————
System.COnsole.WriteLine(
   "Hello. My name is Inigo Montoya”);
———————————————————————————————————

     在清单1.6 原先的WriteLine()语句被分割到两行中。

空白符

    分号的使用使C#编译器能够忽略代码中的空白符。除了一些特殊情况,C#允许开发者在代码中插入空白符,这并不影响语义。在清单1.5和清单1.6中,在一个语句内或两个语句间插入新行没什么关系,这这样做并不影响编译器产生的可执行文件。

什么是空白符

    空白符是一个或多个连续的格式字符,比如tab,空格,换行符。显然消除单词间的空白是很有意义的,比如引号间的空白。

     通常,程序员使用空白符缩进排版来增加可读性。咱来看看清单1.7和1.8的差别

清单1.7
—————————————————————————
class HelloWorld
{
static void Main()
{
System.Console.WriteLine(“Hello Inigo Montoya”);
}
}
—————————————————————————

清单1.8
—————————————————————————————
class HelloWorld{static void Main()
{System.COnsole.WriteLine(“Hello Inigo Montoya”);}}
—————————————————————————————

尽管这两个例子看起来由点不同,但C#编译器看他们是一样一样一样的。

使用空白符格式化代码

    使用空白符缩进排版是增加可读性的重要方式。当你开始写代码时,你需要按照习惯和代码标准来提高代码的可读性。

    本书使用的格式习惯是,花括号独自一行,在一对儿花括号中的代码需要缩进。如果花括号中还包含另一对儿花括号,则第二对儿括号中的所有代码都缩进。

    这并不是C#的制式风格,不过这也是一个很优美的风格。

(本章未完)

原文地址:https://www.cnblogs.com/yaoshi641/p/1539425.html