[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:依赖倒置

面向对象设计的SOLID原则

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对象.并且非常建议给定初始值.

C# 字符串拘留池机制

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

时间: 2024-11-29 12:58:08

[C#] CSharp 基本语法的相关文章

整理了一些.NET的视频学习资料,希望能够帮助到大家

1.跟我学DNET编程系列-.NET OOP编程[爸爸去哪儿] http://edu.ibeifeng.com/view-index-id-25.html 2.深入webservice专题系列技术讲座 http://edu.ibeifeng.com/view-index-id-169.html 3.跟我学DNET编程系列-CSharp十种语法糖 http://edu.ibeifeng.com/view-index-id-26.html 4.跟我学DNET编程系列-跟我一起学EF5.0 http:

DNET编程基础教程

1.跟我学DNET编程系列-.NET OOP编程[爸爸去哪儿] http://edu.ibeifeng.com/view-index-id-25.html 2.跟我学DNET编程系列-CSharp十种语法糖 http://edu.ibeifeng.com/view-index-id-26.html 3.跟我学DNET编程系列-跟我一起学EF5.0 http://edu.ibeifeng.com/view-index-id-22.html 4.零基础入门系列-跟微软认证专家学ASP.NET MVC

.NET基础教程免费学,.NET实战开发教程

零基础学.NET平台和Csharp编程开发 http://edu.ibeifeng.com/view-index-id-524.html 基于ASP.NET MVC4和Knockout.JS等技术实现Web通用商业框架 http://edu.ibeifeng.com/view-index-id-393.html ASP.NET之cms文章内容管理系统 http://edu.ibeifeng.com/view-index-id-359.html 专题:asp.net下的工作流技术WF4.0 htt

C#语法糖(Csharp Syntactic sugar)大汇总

首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1.  经过简化的Property 早些时候我们这样声明Property 1 2 3 4 5 6 7 8 9 10 11 private string _myName; public string MyName {     get { return _myName; }     set { _myName

CSharp文件读取与写入入门图解

C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似:它包括了诸如单一继承.接口.与Java几乎同样的语法和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角. 用c#来读取

从零开始学C#——基本语法(二)

基本语法 (菜鸟系列学习教程) C#,又名Csharp,天朝喜欢叫C井. C#是一种面向对象的编程语言.在面向对象的程序设计方法中,程序有各种相互交互的对象组成.相同种类的对象通常具有相同的类型,或者说,是在先沟通那个的class中. 例如,以Rectangle(矩形)对象为例,它具有length和width属性.根据设计,它可能需要接受这些属性值,计算面积和详细细节. 让我们来看看一个Rectangle类的实现,并借此套论C#的基本语法 1 using System; 2 namespace

editplus配置csharp

只要是写代码的,我们肯定常有用到EditPlus..Net开发也是如此.有时我们需要调试一小段C#(或VB.Net)代码,这时去大动干戈在臃肿的VS.Net中新建“控制台应用程序”项目,写满“Console.ReadLine()”,总会有点不爽吧?这时你肯定想到要在EditPlus中配置C#运行环境了.直接在EditPlus中运行C#多舒服? 打开GOOGLE,输入“善用EditPlus构建精悍的C#编译环境”,或者“在EditPlus里配置C#的编写环境全过程”.一搜索,符合查询结果的有多少?

C#7的新语法

C#7为C#语言添加了许多新功能: out变量: 您可以将out内联值声明为使用它们的方法的参数. 元组 您可以创建包含多个公共字段的轻量级,未命名的类型.编译器和IDE工具可以理解这些类型的语义. 模式匹配 您可以根据这些类型的成员的任意类型和值创建分支逻辑. ref 当地人和回报 方法参数和局部变量可以是对其他存储的引用. 本地功能 您可以将功能嵌套在其他功能中,以限制其范围和可见性. 更健康的成员 可以使用表达式创作的成员列表已经增加. throw 表达式 您可以在以前不允许的代码结构中抛

vs2010 .net4.0 错误 事件的显式接口实现必须使用事件访问器语法

event EventHandler IDbReference.DbRefEvent; 如果按照以上的写法,会提示错误: 事件的显式接口实现必须使用事件访问器语法 需要修改为一下这种写法 private EventHandler DbRefEvent;        event EventHandler IDbReference.DbRefEvent        {            add            {                DbRefEvent += value;