C Sharp 基本语法

1.规范:

除常量外,所有变量用驼峰命名方式,其它用帕斯卡命名方式.

 

2.编译:

首先由csc.exe将cs文件编译成MSIL.当双击exe的时候,会由clr的jit(just in time)编译器再次编译成cpu指令.

csc位置(如):C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe

csc命令(如):csc /t:library acme.cs(编译成类库) csc /r:acme.dll test.cs(引用acme.dll后编译)

ngen位置(如):C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe(可实现jit效果)

ngen命令(如):ngen install D:\SystemTool\HelloWorld.exe  (备注:exe方式)

 

3.面向对象(Object-Oriented 面向对象编程:Object-Oriented-Programming):

类是抽象的,对象是具体的.

析构函数:~ClassName(){}.实际是重写基类的Finalize()方法

 

4.变量:

成员变量:默认有一个初始值.string->null,int->0,bool->false

局部变量:使用前必须赋值.

 

5.封装:

 a.字段封装成属性 b.方法参数封装成类 c.方法重用 d.封装成类库

 

6.继承:

单根性,传递性

构造函数不继承.

 

7.多态:

a.vitual和override方法可以给重写

b.abstract方法

c.接口

 

8.访问修饰符:

成员访问修饰符:
private:当前类内

protected:当前类内和子类内

internal:当前程序集内

protected internal:当前程序集内或当前类内和子类内

public:所有都可以

命名空间下的访问修饰符:

只允许使用public和internal,但是微软内部使用private.

 

9.静态:

静态作为与多态区别的.stati修饰.

静态类:不能被实例化,成员都为静态成员,可以有const常量

静态成员:静态成员在赋初始值的时候,是在静态构造函数中赋值的.

静态构造函数:在类第一次使用前只调用一次.不能有修饰符,不能重载.

 

10.值类型与引用类型 值传递与引用传递:

值类型:int double struct等隐式继承ValueType.

引用类型:string 类 数组等隐式继承Object.

值传递:默认就是值传递.

引用传递:在方法参数中加上ref就是引用传递.

 

11.SOLID:

single:单一职责

open:开发封闭

lis:里氏替换

interface:接口分离

depend:依赖倒置

 

12.接口:

a.接口里只能定义方法.

b.接口的成员不能有修饰符.默认为public

 

13.实现接口和显示实现接口:

一个类同时实现接口和显示实现接口。

显示实现接口:当被调用的是接口的时候,则调用显示接口的方法

实现接口:默认执行实现接口的方法.

 

14.类型转换:

隐式转换:当小范围的类型转大范围的类型.

强制转换:当指定的大范围的类型对象可以转小范围类型的时候用(类型名)或者as进行转换

convert:语义转换

parse:将其他类型转换成数字类型

 

15.单位:

1byte = 8bit

1kb = 1024byte

Int32 = int : 4byte

 

16.异常处理:

错误类型:语法错误/逻辑错误/运行错误

throw; :在catch中执行就是将异常继续往上抛

在try-catch-finally中,注意return的问题.本质都是编译把return拿到最下面.通过反编译工具可以看到return的值会单独拿个变量接受

 

17.参数修饰符:

params:可变参数

out:传出参数

ref:引用传递,本质在传参数的值的时候,传递的是该变量的内存地址

 

18.字符串:

1.字符串不可变性:实际双引号里的字符串 都是常量.普通声明的常量,是声明一个常量的变量接受一个常量.

2.字符串拘留池:正是因为字符串的不可变性,所以提出了这个池的技术,实际就是把字符串的内容当做键,字符串的地址当做值.

3.StringBuilder:在字符串拼接时,一定要使用该对象.否则将不断创建string对象.并且非常建议给定初始值.

 

19.垃圾回收 GC:

回收对象:托管资源内存中的堆对象.

回收时间:不确定

垃圾回收分3代.当第一代空间满的时候,就回收第一代资源,并把没有回收的对象移到第二代中.依次类推.非常不建议手动垃圾回收.

 

20.集合:

集合和数组 表面上一个是不定长度 一个固定长度. 实际本质集合的内部维护着一个数组.当增加一个元素的时候,会重新一个new一个数组

常见集合:

ArrayList        List<T>

Hashtable       Dictionary<T,T>                                                           

Stack         Stack<T>LIFO

Queue        Queue<T>

微软建议使用泛型类的集合.本质原因也是因为减少装箱拆箱的次数.

21.装箱拆箱

装箱拆箱发生在发生在父子类之间的.

装箱:值类型转成引用类型.常转成Object,值类型实现的接口.

拆箱:引用类型转成值类型.常在强制转换成值类型中出现

 

22.Path File Directory FileInfo DirectoryInfo Stream StreamWriter StreamReader

路径 文件 目录 文件信息 目录信息 流 写入流 读入流

以流的形式 会减轻设备的压力.不会出现一下子全读完才执行后续操作.

 

23.编码

ASCII  GB2312  GBK  UNICODE  UTF-8

Encoding.GetEncodings()取计算机所有编码

实际字符串存储在计算机上都是数字,以byte[]的方式存储.

乱码的原因就是存的编码和读的编码不一致导致的

 

24.序列化

序列化步骤:创建序列化器,序列化或者反序列化.

xml序列化: XmlSerializer 类 (System.Xml.Serialization) 

js序列化:JavaScriptSerializer 类 (System.Web.Script.Serialization)

二进制序列化:BinaryFormatter类(System.Runtime.Serialization.Formatters.Binary)

序列化:将对象状态保存到存储设备.

 

25.委托/事件

委托本质就是一个类型

事件是委托的对象,本质是一个私有的委托对象和2个public的方法.所以事件只有类内部能调用!

 

26.匿名

匿名方法:delegate(参数){方法体} 多用于委托对象赋值,本质是编译器起了一个名字.

Lambda:语句:(参数)=>{方法体} 表达式(只有一个参数,方法体只有一句话的时候)例如:x=>x+2;

匿名类型例:new {Code = ViewBag.Code};匿名类型的属性是只读的!本质匿名类型的字段都是私有的readonly,封装成只读的属性.

 

27.泛型

泛型支持:类 方法 委托 接口

泛型约束:where T: class struct new() 类名 接口名

 

28.扩展方法

扩展方法:静态类 静态方法 第一个参数类型就是要扩展的类型

本质是编译器把扩展的类型作为参数传到静态方法中.

 

29.程序集

.net生成的exe和dll都是程序集.

包括类型元数据,程序集元数据,资源文件,MSIL中间语言.

公共的Assembly在GAC中,所以编译的时候,默认导入的程序集不会输出.

 

30.Type Assembly

描述类的类型.通过Type对象,可以实例化出这个Type所指的类型的对象.

Type:通过Typeof(类名),GetType(对象名)

Assembly:Assembly.LoadFrom(程序集名)返回一个Assembly对象.GetType(类的限定名)获得指定的类的Type对象.

根据Type创建对象:Activator.CreateInstance(Type对象名)

 

31.XML

可扩展标记语言:区分大小写,一个根节点,属性值双引号,CDATA区,注释和html一样,文档申明的编码和实际编码要一致.

 

32.深拷贝 浅拷贝

深拷贝是所有成员都在内存中拷贝一份.通过序列化可以完成深拷贝.

浅拷贝:除了深拷贝,都是浅拷贝,MemberwiseClone()可以直接拷贝.

 

33.正则表达式

正则表达式是描述字符串特征的表达式

元字符(反斜杠):

  .  []  |  ()  {n,m}  *  ?  +  \d  \s  \w  \b  ^  $

  .    :  单个任意字符除了换行符

  []     :  取中括号内任意一个字符

  |    :  或的优先级非常低

  {n,m} :  前面的字符出现n到m次

  *    :  0次或多次

  ?    :  0次或1次

  +    :  1次或多次

  \d    :  0-9

  \s    :  空白

  \w    :  0-9a-zA-Z_  单个字符

  \b    :  单词边界

  ^    :  head

  $    :  end

 

转载于:https://www.cnblogs.com/qwqtt/p/8018148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、.Net平台 .Net FrameWork框架 .Net FrameWork框架提供了一个稳定的运行环境,;来保障我们.Net平台正常的运转 2、C#语言 c sharp 编程语言,如果你想要计算机按照你说的去做,你必须说计算机能够听懂的语言。 2001年 any time any place and on any device 任何时间任何地点都能够让用户通过任何设备获取到用户想要的数据 1997 李开复 XXX 乔布斯 windows phone====》安卓===》wp7===》 wp8======>unity3D Unity3D 老鼠---猫 c# JS BOO 3、两种交互模式 C/S:要求客户的电脑上必须要安装一个客户端:qq、360、快播等..... B/S:要求客户的电脑上只需要安装一个浏览器。 4、IDE IDE指的就是我们的开发工具。 5、vs的学习 1)、启动VS a、双击图标 b、调出cmd,输入 devenv 2)、解决方案、项目及类之间的关系 解决方案:公司 项目:部门 类:员工 在视图里面找解决方案资源管理器 3)、Program中的各个组成部分 引用命名空间: 京东----》京东在线商城项目---》顾客类 淘宝----》淘宝在线商城项目---》顾客类 高端霸气公司----》老赵牛X项目---》顾客类 4)、方法或者函数 Main函数是我们程序的主入口,你写的代码如果想要被执行的话,必须写在Main函数当中。 5)、 .sln:解决方案文件,里面包含着整个解决方案的信息,可以双击运行。 .csproj:项目文件,里面包含着这个项目的信息,可以双击运行。 6、书写代码需要注意的地方: 1、代码中出现的所有标点都是英文半角 shift键快速切换中文半角和英文半角 shift+空格 切换全角/半角 2、在c#代码中,每行代码的结束,我们都以分号结束,注意:这个分号也是英文半角的分号。 3、Console.WriteLine("要打印的内容"); Console.ReadKey(); 1)、暂停当前程序,等待用户按下任意键继续,按下的任意键将显示在我们的控制台当中 7、运行程序的两种方式 1、点击绿色的启动按钮 2、使用快捷键F5 8、生成解决方案 帮助我们排查语法错误。
目录 1. 介绍... 1 1.1 Hello, world. 1 1.2 类型 2 1.2.1 预定义类型... 3 1.2.2 转换... 5 1.2.3 数组类型... 6 1.2.4 类型系统一致... 7 1.3 变量和参数... 8 1.4 自动内存管理... 11 1.5 表达式... 13 1.6 声明 14 1.7 类... 17 1.7.1 常数... 19 1.7.2 域... 19 1.7.3 方法... 20 1.7.4 属性... 21 1.7.5 事件... 22 1.7.6 操作符... 23 1.7.7 索引... 24 1.7.8 实例构造函数... 25 1.7.9 析构函数... 26 1.7.10 静态构造函数... 26 1.7.11 继承... 27 1.8 结构 28 1.9 接口 29 1.10 代表... 30 1.11 联合... 31 1.12 名称空间和集合... 31 1.13 版本... 33 1.14 特征... 35 2. 语法结构... 37 2.1 翻译的阶段... 37 2.2 文法符号... 37 2.3 预处理... 38 2.3.1 预处理声明... 38 2.3.2 #if, #elif, #else, #endif 39 2.3.3 预处理控制行... 40 2.3.4 #line. 41 2.3.5 预处理标识符... 41 2.3.6 预处理表达式... 41 2.3.7 与空白交互作用... 42 2.4 语法分析... 43 2.4.1 输入... 43 2.4.2 输入字符... 43 2.4.3 行结束符... 43 2.4.4 注释... 43 2.4.5 空白... 44 2.4.6 标记... 45 2.5 句法分析... 45 2.5.1 标识符... 45 2.5.2 关键字... 46 2.5.3 数据符号... 46 2.5.4 操作符和标点... 51 2.5.5 Unicode 字符转意字符序列... 51 3. 基本概念... 53 3.1 声明 53 3.2 成员 55 3.2.1 名称空间成员... 55 3.2.2 结构成员... 55 3.2.3 枚举成员... 55 3.2.4 类成员... 56 3.2.5 接口成员... 56 3.2.6 数组成员... 56 3.2.7 代表成员... 56 3.3 成员访问... 56 3.3.1 声明可访问性... 56 3.3.2 可访问性域... 57 3.3.3 保护的访问... 59 3.3.4 可访问性约束... 60 3.4 签名和重载... 60 3.5 范围 61 3.5.1 名称隐藏... 63 3.6 名称空间或类型名称... 65 3.6.1 合格的名称... 66 4. 类型... 67 4.1 数值类型... 67 4.1.1 默认构造函数... 68 4.1.2 结构类型... 69 4.1.3 简单类型... 69 4.1.4 整数类型... 70 4.1.5 浮点类型... 71 4.1.6 十进制类型... 72 4.1.7 布尔类型.. 72 4.1.8 枚举类型... 72 4.2 引用类型... 72 4.2.1 类类型... 73 4.2.2 对象类型... 73 4.2.3 字符串类型... 73 4.2.4 接口类型... 74 4.2.5 数组类型... 74 4.2.6 代表类型... 74 4.3 包装和解包... 74 4.3.1 包装转换... 74 4.3.2 解包转换... 75 5. 变量... 77 5.1 变量类型.. 77 5.1.1 静态变量.. 77 5.1.2 实例变量... 77 5.1.3 数组元素... 78 5.1.4 数值参数... 78 5.1.5 引用参数... 78 5.1.6 输出参数... 78 5.1.7 局部变量... 79 5.2 默认值... 79 5.3 明确赋值... 79 5.3.1 初始赋值变量... 81 5.3.2 非初始赋值变量... 82 5.4 变量引用... 82 6. 转换... 83 6.1 隐式转换... 83 6.1.1 同一性转换... 83 6.1.2 隐式数值转换... 83 6.1.3 隐式枚举转换... 84 6.1.4 隐式引用转换... 84 6.1.5 转换... 84 6.1.6 隐式常数表达式转换... 84 6.1.7 用户自定义隐式转换... 85 6.2 显式转换... 85 6.2.1 显式数值转换... 85 6.2.2 显式枚举类型转换... 86 6.2.3 显式引用类型转换... 86 6.2.4 解包转换... 87 6.2.5 用户自定义显式转换... 87 6.3 标准转换... 87 6.3.1 标准隐式转换... 87 6.3.2 标准显式转换... 88 6.4 用户定义转换... 88 6.4.1 允许的用户自定义转换... 88 6.4.2 用户自定义转换的取值... 88 6.4.3 用户自定义隐式转换... 89 6.4.4 用户自定义显式类型转换... 89 7. 表达式... 91 7.1 表达式分类... 91 7.1.1 表达式的数值... 92 7.2 操作符... 92 7.2.1 操作符优先级和结合顺序... 92 7.2.2 操作符重载... 93 7.2.3 一元操作符重载分析... 94 7.2.4 二元操作符重载分析... 94 7.2.5 候选用户定义操作符... 95 7.2.6 数字升级... 95 7.3 成员查询... 96 7.3.1 基类型... 97 7.4 函数成员... 97 7.4.1 参数列表... 99 7.4.2 重载分析... 100 7.4.3 功能成员调用... 102 7.4.4 虚拟函数成员查找... 103 7.4.5 接口函数成员查找... 103 7.5 主要的表达式... 103 7.5.1 文字... 103 7.5.2 简单名称... 104 7.5.3 加括号的表达式... 105 7.5.4 成员访问... 105 7.5.5 调用表达式... 107 7.5.6 元素访问... 109 7.5.7 This访问... 110 7.5.8 基本访问... 111 7.5.9 递增和递减后缀操作符... 111 7.5.10 new操作符... 112 7.5.11 typeof操作符.. 116 7.5.12 sizeof操作符... 116 7.5.13 checked和unchecked操作符.. 117 7.6 一元表达式... 119 7.6.1 一元正值运算符... 119 7.6.2 一元负值运算符... 119 7.6.3 逻辑非运算符... 120 7.6.4 按位求补运算符... 120 7.6.5 间接运算符... 120 7.6.6 地址运算符... 120 7.6.7 前缀增量和减量运算符... 120 7.6.8 强制类型转换表达式... 121 7.7 算术运算符... 122 7.7.1 乘法运算符... 122 7.7.2 除法运算符... 123 7.7.3 余数运算符... 124 7.7.4 加法运算符... 124 7.7.5 减法运算符... 126 7.8 移位运算符... 127 7.9 关系运算符... 128 7.9.1 整数比较运算符... 129 7.9.2 浮点比较运算符... 129 7.9.3 小数比较运算符... 130 7.9.4 布尔相等运算符... 130 7.9.5 枚举比较运算符... 130 7.9.6 引用类型相等运算符... 130 7.9.7 字符串相等运算符... 132 7.9.8 代表相等运算符... 132 7.9.9 is 运算符... 132 7.10 逻辑运算符... 133 7.10.1 整数逻辑运算符... 133 7.10.2 枚举逻辑运算符... 133 7.10.3 布尔逻辑运算符... 134 7.11 条件逻辑运算符... 134 7.11.1 布尔条件逻辑运算符... 134 7.11.2 用户自定义的条件逻辑运算符... 135 7.12 条件运算符... 135 7.13 赋值运算符... 136 7.13.1 简单赋值... 136 7.13.2 组合赋值... 138 7.13.3 事件赋值... 139 7.14 表达式... 139 7.15 常量表达式... 139 7.16 布尔表达式... 140 8. 语句... 141 8.1 终点与可达性... 141 8.2 块 142 8.2.1 语句列表... 143 8.3 空语句... 143 8.4 标号语句... 144 8.5 声明语句... 144 8.5.1 局部变量声明... 144 8.5.2 局部常量声明... 145 8.6 表达式语句... 145 8.7 选择语句... 146 8.7.1 if语句... 146 8.7.2 Switch 语句... 147 8.8 重复语句... 150 8.8.1 while语句... 151 8.8.2 do语句... 151 8.8.3 for语句... 151 8.8.4 foreach语句... 153 8.9 跳转语句... 154 8.9.1 break语句... 154 8.9.2 continue语句... 155 8.9.3 goto语句... 155 8.9.4 return语句... 156 8.9.5 throw语句... 156 8.10 try语句... 157 8.11 checked和unchecked语句... 159 8.12 lock语句... 159 9. 名称空间... 161 9.1 编译单元... 161 9.2 名称空间声明... 161 9.3 使用指示... 162 9.3.1 使用别名指示... 163 9.3.2 使用名称空间指示... 165 9.4 名称空间成员... 166 9.5 类型声明... 167 10. 类 169 10.1 类声明... 169 10.1.1 类修饰符... 169 10.1.2 类基础规范... 170 10.1.3 类主体... 172 10.2 类成员... 172 10.2.1 继承... 173 10.2.2 new修饰符... 173 10.2.3 访问修饰符... 174 10.2.4 要素类型... 174 10.2.5 静态和实例成员... 174 10.2.6 嵌套类型... 175 10.3 常数... 175 10.4 域 176 10.4.1 静态和实例域... 177 10.4.2 只读域... 178 10.4.3 域的初始化... 179 10.4.4 变量初始化函数... 179 10.5 方法... 181 10.5.1 方法参数... 182 10.5.2 静态和实例方法... 185 10.5.3 虚拟方法... 186 10.5.4 覆盖方法... 187 10.5.5 抽象方法... 189 10.5.6 外部方法... 190 10.5.7 方法主体... 191 10.5.8 方法重载... 191 10.6 属性... 191 10.6.1 静态属性... 192 10.6.2 虚拟属性... 192 10.6.3 覆盖属性... 193 10.6.4 抽象属性... 194 10.6.5 访问符... 194 10.7 事件... 199 10.8 索引... 202 10.8.1 索引重载... 205 10.8.2 虚拟索引... 205 10.8.3 覆盖索引... 205 10.8.4 抽象索引... 206 10.9 操作符... 206 10.9.1 一元操作符... 207 10.9.2 二元操作符... 207 10.9.3 转换操作符... 208 10.10 实例构造函数... 209 10.10.1 构造函数初始化函数... 210 10.10.2 实例变量初始化函数... 210 10.10.3 构造函数执行... 210 10.10.4 默认构造函数... 212 10.10.5 私有构造函数... 213 10.10.6 可选的构造函数参数... 213 10.11 析构函数... 213 10.12 静态构造函数... 214 10.12.1 类加载和初始化... 215 11. 结构... 217 11.1 结构声明... 217 11.1.1 结构修饰符... 217 11.1.2 接口... 217 11.1.3 结构体... 217 11.2 结构成员... 217 11.3 结构例子... 217 11.3.1 数据库整数类型... 217 11.3.2 数据库布尔类型... 219 12. 数组... 221 12.1 数组类型... 221 12.1.1 System.Array 类型... 222 12.2 数组创建... 222 12.3 数组元素访问... 222 12.4 数组成员... 222 12.5 数组协方差... 222 12.6 数组初始化函数... 223 13. 接口... 225 13.1 接口声明... 225 13.1.1 接口修饰符... 225 13.1.2 基本接口... 225 13.1.3 接口主体... 226 13.2 接口成员... 226 13.2.1 接口方法... 227 13.2.2 接口属性... 227 13.2.3 接口事件... 228 13.2.4 接口索引... 228 13.2.5 接口成员访问... 228 13.3 完全有效的接口成员名称... 230 13.4 接口实现... 230 13.4.1 显式接口成员实现程序... 231 13.4.2 接口映射... 233 13.4.3 接口实现程序继承... 235 13.4.4 接口重新实现程序... 236 13.4.5 抽象类和接口... 238 14. 枚举... 239 14.1 枚举声明... 239 14.2 枚举成员... 240 14.3 枚举数值和操作... 242 15. 代表... 243 15.1 代表声明... 243 15.1.1 可合并的代表类型... 244 15.2 代表实例化... 244 15.3 多点传送代表... 244 15.4 代表调用... 244 16. 异常... 245 16.1 异常的产生... 245 16.2 System.Exception 类... 245 16.3 异常怎样被处理... 245 16.4 通用异常类... 246 17. 属性... 247 17.1 属性类... 247 17.1.1 AttributeUsage 属性... 247 17.1.2 位置的和名称的参数... 248 17.1.3 属性参数类型... 248 17.2 规范... 249 17.3 属性实例... 251 17.3.1 一个属性的编译... 251 17.3.2 一个属性实例的运行时检索... 252 17.4 保留的属性... 252 17.4.1 AttributeUsage 属性... 252 17.4.2 条件属性... 253 17.4.3 废弃的属性... 255 18. 危险代码... 257 18.1 危险代码... 257 18.2 指针类型... 257 19. 互用性... 259 19.1 COMImport 属性... 259 19.2 COMRegisterFunction 属性... 259 19.3 COMSourceInterfaces 属性... 260 19.4 COMVisible 属性... 260 19.5 DispId 属性... 260 19.6 DllImport 属性... 260 19.7 FieldOffset 属性... 261 19.8 GlobalObject 属性... 261 19.9 Guid 属性... 262 19.10 HasDefaultInterface 属性... 262 19.11 ImportedFromTypeLib 属性... 262 19.12 In 和 Out 属性... 262 19.13 InterfaceType 属性... 263 19.14 MarshalAs 属性... 263 19.15 NoIDispatch 属性... 264 19.16 NonSerialized 属性... 264 19.17 Predeclared 属性... 264 19.18 PreserveSig 属性... 264 19.19 Serializable 属性... 265 19.20 StructLayout 属性... 265 19.21 TypeLibFunc 属性... 265 19.22 TypeLibType 属性... 265 19.23 TypeLibVar 属性... 266 19.24 支持的枚举... 266 20. 参考... 269

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值