zoukankan      html  css  js  c++  java
  • [C#] CSharp 基本语法

    CSharp Language Specification

    一、基础

    1.规范:

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

    2.编译:

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

    csc位置(如):C:WindowsMicrosoft.NETFrameworkv4.0.30319csc.exe

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

    ngen位置(如):C:WindowsMicrosoft.NETFrameworkv4.0.30319 gen.exe(可实现jit效果)

    ngen命令(如):ngen install D:SystemToolHelloWorld.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    ^  $

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

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

      |    :  或的优先级非常低

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

      *    :  0次或多次

      ?    :  0次或1次

      +    :  1次或多次

      d    :  0-9

      s    :  空白

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

          :  单词边界

      ^    :  head

      $    :  end

  • 相关阅读:
    [原]【实例化需求】1.FitNesse工具应用简介
    [原][问题解决]常见问题的5种解决办法(由Jenkins问题解决谈起)
    [原][自动化测试]Robot Framework Selenium基本使用
    [原]好玩的Linux,关于时间cal命令
    [原][问题解决]Romote Control 图形化界面显示问题解决办法
    【SBE】由需求管理谈起
    [Robot]关于robot的几个学习网站
    coolite中在UserControl中使用Coolite.AjaxMethods方法
    javascript实现页面加载进度条(转)
    coolite 在前台更新Window中控件的值
  • 原文地址:https://www.cnblogs.com/neverc/p/4320791.html
Copyright © 2011-2022 走看看