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()移动文件;

  • 相关阅读:
    mysql随笔
    nodejs+websocket+egret
    mysql语法
    npm没反应的坑------windows配置nodejs
    nodejs打包模块问题
    nodejs中使用protobuf遇见的环境变量问题
    自己写的.net ORM 框架
    常用正则验证
    .NET中判断国内IP和国外IP
    位运算
  • 原文地址:https://www.cnblogs.com/www-datou-com/p/5905038.html
Copyright © 2011-2022 走看看