• [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

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/neverc/p/4320791.html
Copyright © 2020-2023  润新知