[C#] CSharp 基本语法
一、基础
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
[C#] CSharp 基本语法的更多相关文章
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
一.前言 为什么选择VS Code?VS Code 是一款跨平台的代码编辑器,想想他的哥哥VS,并是微软出品的宇宙第一IDE,那作为VS的弟弟,VS Code 也不会差,毕竟微软出品.反正ken是这么 ...
- C#语法糖(Csharp Syntactic sugar)大汇总
首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...
- C#语法糖(Csharp Syntactic sugar)
目录 一.C#语法糖大汇总 1. 经过简化的Property2. 经过两次变异的委托写法3. 集合类的声明4. 集合类各个项的操作5. using == try finally6. 可爱的var7. ...
- CSharp 相关知识点小结
1.JS获取iframe下面的内容document.getElementById('IFRAME1').contentDocument; 2.dialog 弹出层,定位:postion:'bottom ...
- LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法
介绍 ·Select - Select选择:延迟 ·Where - Where查询:延迟 ·OrderBy - 按指定表达式对集合正序排序:延迟 ·OrderByDescend ...
- python语法-[with来自动释放对象]
python语法-[with来自动释放对象] http://www.cnblogs.com/itech/archive/2011/01/13/1934779.html 一 with python中的w ...
- Csharp多态的实现(虚方法)
1.什么是抽象类 1.1虚方法是用virtual修饰,在子类中用override进行重写 1.2虚方法是一个方法,放在类里面(可以再下面的代码中看到) 1.3虚方法可以 重写,也可以不重写(这个可以再 ...
- Csharp Syntactic sugar
C#语法糖(Csharp Syntactic sugar)大汇总 首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在 ...
- 从零开始学C#——基本语法(二)
基本语法 C#,又名Csharp,天朝喜欢叫C井. C#是一种面向对象的编程语言.在面向对象的程序设计方法中,程序有各种相互交互的对象组成.相同种类的对象通常具有相同的类型,或者说,是在先沟通那个的c ...
随机推荐
- 用node-webkit 开发 PC 客户端
7月 3 2013 导言 node-webkit 是一个很神奇的桌面客户端项目,正如这个项目的名字,这个项目是由node 和 webkit 构成,简单来说,就是你可以用HTML 5和 node 进 ...
- android通话时第二通电话呼叫等待提示音音量大小
callnotifier.java public void run() { ...... switch (mToneId) { case TO ...
- [Aaronyang]谈谈2015年AY对WPF全面技术总结40多篇WPF,炫到没朋友的AYUI来了
原著:AY WPF博客- 把wpf推广出去,让那些鄙视的人说不 大家好! 我是AY,首先声明,我在做一件很枯燥的事情,我是个91后程序员,每天熬夜完成计划的过着下班后的生活. 那天有 ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- js数据类型判断和数组判断
这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...
- oracle中查询某张表都被哪些表参照了
起因: 系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错.比如警员信息,在考勤记录表里会引用警员ID,如果考勤记录表中已经存在这个警员ID了,这时从警员表中 ...
- Spring 注释 @Autowired 和@Resource 的区别
Spring 注释 @Autowired 和@Resource 的区别 一. @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上. 二. @Autowired ...
- WeifenLuo组件中如何设置停靠窗体的宽度
在项目中使用了WeifenLuo.WinFormsUI.Docking组件,窗体停靠效果非常棒. 现在项目出现了这样的需求,希望可以控制停靠窗体的宽度,因为默认的宽度往往会造成停靠窗体的内容显示不完全 ...
- apk签名
参考:http://stackoverflow.com/questions/13578134/how-to-automate-keystore-generation-using-the-java-ke ...
- 理解WebSocket
WebSocket的动机是什么? 目前的Web通信使用的是HTTP协议,HTTP协议是基于TCP协议的应用层协议,HTTP协议的工作模式是request/response模式.在一次通信中,必须首先由 ...