1. 词法结构 1.1 程序 C# 程序 (program) 由一个或多个源文件 (source file) 组成,源文件的正式名称是编译单元 (compilation unit)(第 9.1 节).源文件是有序的 Unicode 字符序列.源文件与文件系统中的文件通常具有一对一的对应关系,但这种对应关系不是必需的.为实现可移植性的最大化,建议这些文件在文件系统中应按 UTF-8 编码规范编码. 从概念上讲,程序的编译分三个步骤: 转换,这一步将用特定字符指令系统和编码方案编写的文件转换为 Un…
1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类可以对基类进行扩展和专用化. 1.1 类声明 class-declaration 是一个 type-declaration(第 9.6 节),它用于声明一个新类. class-declaration: attributesopt   class-modifiersopt   partialopt  …
1. 特性 C# 语言的一个重要特征是使程序员能够为程序中定义的实体指定声明性信息.例如,类中方法的可访问性是通过使用 method-modifiers(public.protected.internal 和 private)加以修饰来指定的. C# 使程序员可以创造新的声明性信息的种类,称为特性 (attributes).然后,程序员可以将这种特性附加到各种程序实体,而且在运行时环境中还可以检索这些特性信息.例如,一个框架可以定义一个名为 HelpAttribute 的特性,该特性可以放在某些…
1. 结构 结构与类的相似之处在于,它们都表示可以包含数据成员和函数成员的数据结构.但是,与类不同,结构是一种值类型,并且不需要堆分配.结构类型的变量直接包含了该结构的数据,而类类型的变量所包含的只是对相应数据的一个引用(被引用的数据称为“对象”). 结构对于具有值语义的小型数据结构尤为有用.复数.坐标系中的点或字典中的“键-值”对都是结构的典型示例.这些数据结构的关键之处在于:它们只有少量数据成员,它们不要求使用继承或引用标识,而且它们适合使用值语义(赋值时直接复制值而不是复制它的引用)方便地…
1. 语句 C# 提供各种语句.使用过 C 和 C++ 编程的开发人员熟悉其中大多数语句. statement: labeled-statement declaration-statement embedded-statement embedded-statement: block empty-statement expression-statement selection-statement iteration-statement jump-statement try-statement ch…
1. 表达式 表达式是一个运算符和操作数的序列.本章定义语法.操作数和运算符的计算顺序以及表达式的含义. 1.1 表达式的分类 一个表达式可归类为下列类别之一: 值.每个值都有关联的类型. 变量.每个变量都有关联的类型,称为该变量的已声明类型. 命名空间.归为此类的表达式只能出现在 member-access(第 7.6.4 节)的左侧.在任何其他上下文中,归类为命名空间的表达式将导致编译时错误. 类型.归为此类的表达式只能出现在 member-access(第 7.6.4 节)的左侧,或作为…
1. 转换 转换(conversion) 使表达式可以被视为一种特定类型.转换可导致将给定类型的表达式视为具有不同的类型,或其可导致没有类型的表达式获得一种类型.转换可以是隐式的 (implicit) 或显式的 (explicit),这将确定是否需要显式地强制转换.例如,从 int 类型到 long 类型的转换是隐式的,因此 int 类型的表达式可隐式地按 long 类型进行处理.从 long 类型到 int 类型的反向转换是显式的,因此需要显式地强制转换. int a = 123; long…
1. 变量 变量表示存储位置.每个变量都具有一个类型,用于确定哪些值可以存储在该变量中.C# 是一种类型安全的语言,C# 编译器保证存储在变量中的值总是具有合适的类型.通过赋值或使用 ++ 和 ‑‑ 运算符可以更改变量的值. 在可以获取变量的值之前,变量必须已明确赋值 (definitely assigned)(第 5.3 节). 如下面的章节所述,变量是初始已赋值 (initially assigned) 或初始未赋值 (initially unassigned).初始已赋值的变量有一个正确定…
1. 类型 C# 语言的类型划分为两大类:值类型 (Value type) 和引用类型 (reference type).值类型和引用类型都可以为泛型类型 (generic type),泛型类型采用一个或多个类型参数.类型参数可以指定值类型和引用类型. type: value-type reference-type type-parameter 第三种类型是指针,只能用在不安全代码中.第 18.2 节对此做了进一步的探讨. 值类型与引用类型的不同之处在于:值类型的变量直接包含其数据,而引用类型的…
1. 基本概念 1.1 应用程序启动 具有入口点 (entry point) 的程序集称为应用程序 (application).应用程序运行时,将创建新的应用程序域 (application domain).同一台计算机上可能会同时运行着同一个应用程序的若干个实例,此时,每一个实例都拥有各自的应用程序域. 应用程序域用作应用程序状态的容器,以此隔离应用程序.应用程序域作为应用程序中和它使用的类库中所定义的类型的容器和边界.同一个类型若被加载到不同的应用程序域中就成为各自独立的客体,由它们在各自应…
A. 语法 此附录是主文档中描述的词法和语法以及不安全代码的语法扩展的摘要.这里,各语法产生式是按它们在主文档中出现的顺序列出的. A.1 词法文法 input: input-sectionopt input-section: input-section-part input-section   input-section-part input-section-part: input-elementsopt   new-line pp-directive input-elements: inpu…
A. 文档注释 C# 提供一种机制,使程序员可以使用含有 XML 文本的特殊注释语法为他们的代码编写文档.在源代码文件中,可以使用特定形式的注释来指导工具从这些注释及其后的源代码元素生成 XML.使用这类语法的注释称为文档注释 (documentation comment).这些注释后面必须紧跟用户定义的类型(如类.委托或接口)或者成员(如字段.事件.属性或方法).该 XML 生成工具称为文档生成器. \t "See documentation comment" (此生成器可以但不需要…
1. 不安全代码 **(注:此章对于跨多语言编程开发非常重要,如遇异常无法完成跨语言,建议使用此种方式.) 如前面几章所定义,核心 C# 语言没有将指针列入它所支持的数据类型,从而与 C 和 C++ 有着显著的区别.作为替代,C# 提供了各种引用类型,并能够创建可由垃圾回收器管理的对象.这种设计结合其他功能,使 C# 成为比 C 或 C++ 安全得多的语言.在核心 C# 语言中,不可能有未初始化的变量.“虚”指针或者超过数组的界限对其进行索引的表达式.这样,以往总是不断地烦扰 C 和 C++ 程…
1. 接口 一个接口定义一个协定.实现某接口的类或结构必须遵守该接口定义的协定.一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口. 接口可以包含方法.属性.事件和索引器.接口本身不提供它所定义的成员的实现.接口只指定实现该接口的类或结构必须提供的成员. 1.1 接口声明 interface-declaration 是用于声明新的接口类型的 type-declaration(第 9.6 节). interface-declaration: attributesopt   interfa…
1. 数组 数组是一种包含若干变量的数据结构,这些变量都可以通过计算索引进行访问.数组中包含的变量(又称数组的元素)具有相同的类型,该类型称为数组的元素类型. 数组有一个“秩”,它确定和每个数组元素关联的索引个数.数组的秩又称为数组的维度.“秩”为 1 的数组称为一维数组 (single-dimensional array).“秩”大于 1 的数组称为多维数组 (multi-dimensional array).维度大小确定的多维数组通常称为两维数组.三维数组等. 数组的每个维度都有一个关联的长…
1. 介绍 C#(读作“See Sharp”)是一种简洁.现代.面向对象且类型安全的编程语言.C# 起源于 C 语言家族,因此,对于 C.C++ 和 Java 程序员,可以很快熟悉这种新的语言.C# 已经分别由 ECMA International 和 ISO/IEC 组织接受并确立了标准,它们分别是 ECMA-334 标准和 ISO/IEC 23270 标准.Microsoft 用于 .NET Framework 的 C# 编译器就是根据这两个标准实现的. C# 是面向对象的语言,然而 C#…
A. 参考资料 Unicode 联合会.The Unicode Standard, Version 3.0(Unicode 标准 3.0 版).Addison-Wesley,Reading,Massachusetts,2000,ISBN 0-201-616335-5. IEEE.IEEE Standard for Binary Floating-Point Arithmetic(二进制浮点算术运算 IEEE 标准).ANSI/IEEE 标准 754-1985.在 http://www.ieee.…
1. 委托 **(注:此章非常重要,特别是对于图形界面相关的区别于MFC和QT等的消息机制,委托是基石.) 委托是用来处理其他语言(如 C++.Pascal 和 Modula)需用函数指针来处理的情况的.不过与 C++ 函数指针不同,委托是完全面向对象的:另外,C++ 指针仅指向成员函数,而委托同时封装了对象实例和方法. 委托声明定义一个从 System.Delegate 类派生的类.委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法称为一个可调用实体.对于实例方法,可调用实体由该…
1. 枚举 枚举类型 (enum type) 是一种独特的值类型(第 4.1 节),它用于声明一组命名的常量. 下面的示例 enum Color { Red, Green, Blue } 声明一个名为 Color 的枚举类型,该类型具有三个成员:Red.Green 和 Blue. 1.1 枚举声明 枚举声明用于声明新的枚举类型.枚举声明以关键字 enum 开始,然后定义该枚举的名称.可访问性.基础类型和成员. enum-declaration: attributesopt   enum-modi…
1. 命名空间 C# 程序是利用命名空间组织起来的.命名空间既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法). using 指令(第 9.4 节)用来为命名空间的使用提供方便. 1.1 编译单元 compilation-unit 定义了源文件的总体结构.编译单元的组成方式如下:先是零个或多个 using-directive,后接零个或多个 global-attributes,然后是零个或多个 namespace-member-declaratio…
1. 异常 C# 中的异常用于处理系统级和应用程序级的错误状态,它是一种结构化的.统一的和类型安全的处理机制.C# 中的异常机制非常类似于 C++ 的异常机制,但是有一些重要的区别: 在 C# 中,所有的异常必须由从 System.Exception 派生的类类型的实例来表示.在 C++ 中,可以使用任何类型的任何值表示异常. 在 C# 中,利用 finally 块(第 8.10 节)可编写在正常执行和异常情况下都将执行的终止代码.在 C++ 中,很难在不重复代码的情况下编写这样的代码. 在 C…
C# 语言规范 版本5.0 注意 © 1999-2012 Microsoft Corporation.保留所有权利. Microsoft.Windows.Visual Basic.Visual C# 和 Visual C++ 是 Microsoft Corporation 在美国和/或其他国家/地区的注册商标或商标. 本文提及的其他产品和公司名称可能是其各自所有者的商标. 目录 1. 介绍......................................................…
程序 C# 程序(program)由至少一个源文件(source files)组成,其正式称谓为编译单元(compilation units)[1].每个源文件都是有序的 Unicode 字符序列.源文件通常与文件系统内的相应文件具有一对一关系,但这种相关性并非必须因素.为尽最大可能确保可移植性,推荐文件系统中的文件编码为 UTF-8 编码规范. 从理论上来说,程序编译由三步骤组成: 转换(transformation),将文件中的特定字符编码方案转换为 Unicode 字符序列: 词法分析(l…
数据类型 TC综合开发工具里使用的是可变类型,就是在程序执行过程中,TC综合开发工具会自动把数据转换为需要的类型,转换失败会出现相应的提示但是在一些特殊的场景下,是需要做类型强制处理,那么这时就需要使用到TC综合开发工具里的类型空间 下面的场景就需要使用类型空间进行数据类型的强制转换: 从内存里读出的人物x坐标是100.8945,但是我们在做坐标偏移计算时,就需要把x坐标转换为整型处理使用的方法如下: var x坐标=100.8945 坐标x=cint(x坐标) //会四舍五入,结果:101 坐…
TC综合开发工具里的表达式大体分为:计算表达式.条件表达式 计算表达式: 它一般是用在赋值过程中,或者是和条件表达式混合使用这样的表达式里只有数字运算符(如:+.-.+=.*=等等运算符),没有关系运算符(如:>.== . >=.!=等等运算符)变量使用例如: 目标x =(x+偏移x)* 比例x 结果 = (150+632)*100/(89-59) 条件表达式: 它一般是用在条件判断过程中,返回的是条件成立(真)或者不成立(假).例如:如果语句.循环语句以及遍历语句它使用的是关系运算符例如:…
TC综合开发工具里支持了丰富的运算符,这样也要求大家对运算符的知识必须了解清楚,否则出现错误还不知道问题所在下面就为大家说说运算符的优先级与各个运算符含义 注意: 优先级代表同一表达式中运算符的运算顺序,从高到低!同一级别的按从左到右的原则运算 下图的优先级是从高到低排列的 优先级 运算符 名称或含义 使用形式与说明 1 [ ] 数组下标 数组名[常量表达式] ( ) 圆括号 (表达式)/函数名(形参表) 2 - 负号运算符 -表达式 -10+20 ++ 自增运算符 变量名++,是 变量名=变量…
程式 AC#程序由一个或多个源文件组成,正式称为编译单元(编译单元).源文件是Unicode字符的有序序列.源文件通常与文件系统中的文件一一对应,但不需要此对应关系.为了获得最大的可移植性,建议使用UTF-8编码对文件系统中的文件进行编码. 从概念上讲,程序是使用三个步骤编译的: 转换,将文件从特定字符库和编码方案转换为Unicode字符序列. 词法分析,将Unicode输入字符流转换为标记流. 句法分析,将令牌流转换为可执行代码. 文法 本规范使用两个语法介绍了C#编程语言的语法.的词法(词法…
结构与类类似,因为它们表示可以包含数据成员和函数成员的数据结构.但是,与类不同,结构是值类型,不需要堆分配.结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用,后者称为对象. 结构对于具有值语义的小型数据结构特别有用.复数,坐标系中的点或字典中的键值对都是结构的好例子.这些数据结构的关键是它们具有很少的数据成员,它们不需要使用继承或引用标识,并且可以使用值语义方便地实现它们,其中赋值复制值而不是引用. 如在描述的简单类型,由C#提供的简单的类型,如int,double,和bool,…
Python语言规范   Lint Tip 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dynamic)语言, 这些bug通常由编译器来捕获. 由于Python的动态特性, 有些警告可能不对. 不过伪告警应该很少. 优点: 可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等. 缺点: pylint不完美. 要利用其优势, 我们有时侯需要: a) 围绕着它来写代码 b) 抑制其…
Javascript学习 JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准.次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版. 该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript…