zoukankan      html  css  js  c++  java
  • 深入C#编程

    1.NET框架

    1.1.NET框架结构

    VB.NET  C#  F#  lronruby  others....

        .NET FrameWork(FCL)

         公共语言进行时(CLR)

          操作系统

    .NET框架具有两个主要组建:CLR和FCL;CLR是.NET框架的基础;FCL是一个综合性的面相对象的可重用类型集合;

    CLR公共语言进行时包含CLS(公共语言规范)和CTS(通用类型系统)

    编译过程

    C#代码>MSIL中间语言>CLR(JIT编译器)>平台专用代码

    命名空间

    System:包含其他的命名空间;

    System.Collections.Generic:支持泛型操作;

    System.IO:支持对文件的操作;

    System.Net:支持对网络协议的编程;

    System.Data:提供对表示ADO.NET结构的类的访问;

    System.Windows.Forms:用于开发Windows应用程序;

    System.Drawing:支持GDI+基本图形操作;

    封装:

    自动属性封装字段

    public string Name{get();set()}

    深入C#数据类型

    值类型

    int,float,double,string,boolean,enum,struct

    值类型源于System.ValueType家族;

    所有的值类型都储存在栈上;

    引用类型源于System.Object;

    类,接口,数组;

    结构

    结构的定义:

    访问修饰符 struct 结构名

    {

      //结构体

    }

    结构体可以不用new,直接定义对象即可;

    声明结构体的对象后,必须给结构的成员赋初值;

    结构体不可以给成员赋初值;

    装箱和拆箱:

    将值类型转换为引用类型的过程称为装箱,反之为拆箱;

    装箱示例:

    int i=1;

    object o=i;

    拆箱示例:

    int i=1;

    object o=i;

    int j=(int)o;

    值传递和引用传递;

    有ref的叫做引用传递,反之为值传递;

    集合

    集合分为单列集合和双列集合,泛型集合和非泛型集合

    非泛型集合

    单列

    ArrayList

    语法

    ArrayList list=new ArrayList();

    ArrayList中储存的是object类型;

    双列集合

    Hashtable

    Hashtable语法

    Hashtable list=new Hashtable();

    添加元素

    key为object

    value为object

    list.add(key,value)

    遍历

    foreach(DictionaryEntry item in engineere)

    {

      Console.WriteLine(item.key);

      Console.WriteLine(item.value.Tostring());

    }

    泛型

    单列

    List<string> list=new List<string>();

    双列

    Dictionary<string,int> list=new Dictionary<string,int>();

    遍历

    foreach(KeyValuePair<string,int> item in engineere)

    {

      Console.WriteLine(item.key);

      Console.WriteLine(item.value.Tostring());

    }

    深入类的方法

    构造函数

    在同一个类中,方法名与类名相同,没有返回值;

    class Se

    {

    public Se()

    {

    }

    }

    在没有显示的声明构造函数时系统会在底层自动生成无参构造;

    带参构造函数

    语法

    访问修饰符 类名(参数列表)

    {

      //方法体

    }

    构造函数是用来初始化对象的;

    方法重载

    在同一个类中,方法名相同,参数列表不同,跟返回值没有关系;

    示例

    public void Info()

    {

    }

    public void Info(string a)

    {

    }

    这就构成了方法重载;

    对象交互;

    示例

    //电视机类的方法

    public void open()

    {

    Console.WriteLine("电视机已打开");

    }

    //遥控器类方法

    public void Turenon(TV tv)

    {

      tv.open();

    }

    从上面的例子可以看出调用遥控器类的Turenon(TV tv)方法就可以打开电视机了;这就是对象间的交互;

    初识继承和多态

    移除类的冗余代码

    继承的概念

    A类继承B类,A类就拥有了B类的非私有的属性和方法

    base和Protected

    base表示父类

    调用父类构造函数

    class Employee

    {

    public Employee(string id,string name,int age )

    {

    }

    }

    class SE:Employee

    {

    public SE(string id,string name,int age ):base(id,name,age)

    {

    }

    }

    继承的传递性

    a:b,b:c;则a可以访问c的非私有的属性和方法

    继承的单根性

    一个子类只可以有一个父类

    继承的价值

    继承模拟了现实世界的关系;

    继承实现了代码的重用;

    继承是的程序结构清晰;

    多态

    实现代码的统一调用;

    语法

    访问修饰符 virtual 返回类型 方法名()

    {

      //方法体

    }

    子类

    public override string sayhi()

    {

     //方法体

    }

    深入理解多态

    子类替换父类出现的地方,且程序的行为不会发生任何变化就叫里氏替换

     里氏替换原则是软件设计应该遵守的重要原则之一,有了里氏替换原则,才使继承复用称为可能,只有当子类可以替换掉父类时,软件的功能不受影响,父类才能真正被复用;

    is用于检查对象和制定类型是否兼容

    if(empls[i] is se)

    {

    }

    as用于两个对象间的类型转换

    Se ai=new Se("112","爱变成");

    Se joe=new Se("113","joe");

    PM get=new PM("890","盖子");

    List<Employee> empls=new List<Employee>();

    empls.Add(a1);

    empls.Add(joe);

    empls.Add(gates);

    for(int i=0;i<empls.count;i++)

    {

    if(empls[i] is se)

    {

      Se se=empls[i] as Se;

    Console.WriteLine(se.SayHi());

    }

    if(empls[i] is PM)

    {

      PM se=empls[i] as PM;

    Console.WriteLine(se.SayHi());

    }

    }

    抽象类和抽象方法

    语法

    访问修饰符 abstract 返回类型 方法名();

    抽象方法没有大括号,也就是说没有方法体;

    含有抽象方法的类必然是抽象类;

    语法

    访问修饰符 abstract class 类名{}

    抽象方法

      虚方法      抽象方法

    用virtual修饰    用abstract修饰

    要有方法体,即使是一个分号 不允许有方法体

    可以被子类Override    必须被子类Override

    除了密封类外都可以定义  只能在抽象类中定义

    面相对象的三大特性

    封装:保证对象自身的数据完整性和安全性;

    继承:建立类之间的关系,实现代码复用,方便系统的扩展;

    多态:相同的方法调用可实现不同的实现方式;

    可扩展标记语言XMl

    Xml称为可扩展性语言,用于描述数据;

    xml的每对标记称为节点;

    xml中的节点可自由扩展;

    xml文件的节点区分大小写;

    解析XML

    XmlDocument myXml=new XmlDocument();

    myXml.load("A.Xml");

    XmlNode root=myXml.DocumentElement;

    foreach(XmlNode node in root)

    {

    switch(node.name)

    {

    case "id" :

    Console.writeLine("ID:{0}",node.innerText);

    break;

    case "name" :

    Console.writeLine("姓名:{0}",node.innerText);

    break;

    }

    }

    文件操作

    命名空间

    using System.Io;

    FileStream fs=new FileStream("1.txt",FileMode.Create)

    StreamWriter sw=new StreamWriter(fs);

    sw.Write("1.txt");

    sw.Close();

    fs.close();

    File类和Directory类

    都为静态类

    Exists() 检查文件是否存在

    Copy()将指定路径的文件复制到目标文件中;

    Move()移动到一个新路径

    Delete()删除指定文件;

    Directory类

    Exists() 检查文件夹是否存在

    Move()移动文件夹到一个新路径

    Delete()删除指定文件夹;

    FileInfo类和DirectoryInfo类

    FileInfo

    Exists 检查文件是否存在

    Extension 获取文件扩展名;

    Name 获取文件名;

    FullName 获取目录或文件的完整目录

    方法

    CopyTo() 复制文件

    Delete()删除文件;

    MoveTO()移动文件;

  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/www-datou-com/p/5905038.html
Copyright © 2011-2022 走看看