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

    深入.NET

    第一章:深入.NET框架

    1.1:MIcorsoft.NET框架概述

    特点:

    .Net框架是开发.NET的程序核心基础,提供了一个面向对象的编程环境,完全支持面向对象编程,提高了软件的复用性和扩展性,可维护性,灵活

    1.2:.NET框架体系结构

    1.2.1:.NET框架的主要组件

    他具有两个主要的组件:ClR和FCL。ClR是.NET的基础,FCL是综合性面向对象 的可重用的类型集合。

    1.2.2:CLR介绍

    CLR称为公共语言运行时,他是所有.NET运行的环境,是所有应用程序的编程基础,CLR包括两个组成部分:ClS(公共语言规范)和CTS(通用类型系统)

    1. .NET编译技术

    为了实现夸语言开发和跨平台开发目标,.NET所有编写的应用都不变异成本的代码,而是编译成微软中间代码,将JIT编译器转换成机器代码,然后再编译成MSIl,,再通过JIT编译器编译成相应的平台专用代码。

    1. CTS

    C#和VB都是CLR的托管代码,他们的语法和数据类型都不同CTS(通用类型系统)解决不同的语言数据类型的不同问题。

    1. CLS

    编程语言的区别不仅在于类型,语法或者语言规范也有很多不同,因此.NET通过定义公共语言规范,限制不同点引发的操作性问题。

    1.2.3:FCL

    .NET另外一个重要的组成部分是FCL,就是框架类库

    1.3:面向对象回顾

    1.3.1:类和对象

    概念:类是对象的模型,对象是类的实例

    属性:我么通过GET,Set访问器来进行设置,保障类的数据安全(快捷键:prop+两次tab)

      set:只写属性:只包含Set访问器

      get:只读属性:只包含get访问器

      get,set:读写属性:同时包含两个访问器

    1.3.2:封装

    优点:

    保障数据的安全

    提供清晰的对外接口

    类内部实现可以任意修改,不影响其他类

    1.3.3:类图

    可以将类属性和方法以图的形式展现出来,使阅读者能够清晰的了解类之间的关系

    第二章:深入C#数据类型

    2.1:值类型和引用类型

    2.1.1:概述

    数据类型

    常用的数据类型

    java

    C#

    整形

    int

    int

    浮点型

    float

    float

    双精度型

    double

    double

    字符串

    String

    string

    布尔类型

    boolean

    bool

    枚举类型

    enum

    enum

    1:值类型

    值类型都有一个独立的区域用于保存自己的值,值类型索在的内存区是栈(struck)只要在代码中修改就会在内存区域白菜这也值,值类型一般是基本数据类型和枚举类型

    2:引用数据类型

    一般包括数组,类(对象)和接口,(涉及到new对象了,基本都是引用数据类型)存在于堆中

    类别

    描述

    值类型

    基本数据类型

    int

    Long

    float

    double

    char

    Bool

    枚举类型

    Enum

    结构类型

    Struct

    引用类型

    基类System.Object(对象)

    string

    class

    接口

    Interface

    数组

    Int[]   string[]  

    2.1.1:结构

    定义语法:访问修饰符 struct  结构名

    {

             //结构体

    }

    1结构的特点:

      结构中可以有字段,也可以有方法

      定义结构时,结构的字段不能被复初始值

    2:结构的使用:

      可以不用new对象,直接使用定义的对象就可以了;

      声明结构对象时后,必须给结构成员复值才能使用

    2.1.4:装箱和拆箱

    装箱;把值类型转化成引用类型

    拆箱:把引用类型转化成值类型

    2.2:不同类型的参数传递

    2.2.2:值方式参数传递

    在值方式(没有ref修饰)参数传递时,参数可以是引用类型(会绝对的改变原版),也可以是值类型(只能改变副本,不能改变原版),

    2.2.3:引用方式参数传递

    在引用方式(ref修饰)参数传递时,参数可以是引用类型(会绝对的改变原版),也可以是

    值类型(会绝对的改变原版),也就是说有ref修饰的传递时,无论什么类型都可以绝对的修改

    第三章:使用集合组织相关数据

    3.1:集合概述

    集合:相当于一个可以动态维护的数组   存在于System.Collections命名空间下

    3.1.1:ArrayList

    属性名称

    说明

    Count

    获取集合中的元素个数(相

    当于数组的length)

    返回值类型

    方法名称

    说明

    Int

    Add(object value)

    将对象添加到集合中

    Void

    RemoveAt(int index)

    移除集合中指定下表的元素

    Void

    Remove(object Value)

    从集合中移除指定的元素/对象

    Void

    Clrar()

    清除集合所有元素

      例子(初始化器):ArrayList en=new ArrayList(){

    New SE(){Name=”李四”Age=23,ID=”1001”},

    New SE(){Name=”wangwu”Age=23,ID=”1002”},

    New SE(){Name=”李四”Age=23,ID=”1003”}

    };

      ArrayList  list=new  ArrayList();

    SE se=new SE();

    se.Name=”王超”;

    se.Id=”1003”;

    se.Age=22;

    list..Add(se);  //添加元素

    3.1.2:HashTable

    属性名称

    说明

    Count

    获取集合中的元素个数(相当于数组的length)

    Keys(key)

    获取包含在集合中的keys值的集合(key获得单个元素)

    Values(value)

    获取包含在集合中的元素/值的集合(value获取单个元素)

    返回值类型

    方法名称

    说明

    Int

    Add(object Ksy,object value)

    将对象(指定的key值和元素value)添加到集合中

    Void

    Remove(object key)

    从集合中移除指定的元素/对象

    Void

    Clrar()

    清除集合所有元素

      例子(初始化器):HashTable en=new HashTable (){

    New SE(){Name=”李四”,Age=23,ID=”1001”},

    New SE(){Name=”wangwu”,Age=23,ID=”1002”},

    New SE(){Name=”李四”,Age=23,ID=”1003”}

    };

      HashTable list=new  HashTable ();

    SE se=new SE();

    se.Name=”王超”;

    se.Id=”1003”;

    se.Age=22;

    list..Add(se);  //添加元素

    list[“key值”]     返回单个元素

    foreach( object ob in list.Keys){

    console.write((string)ob)   //获得元素key值

    }

    foreach( object ob in list.values){

    console.write((SE)ob)   //获得元素key值

    }

    3.2:泛型和泛型集合

    特点:可以约束元素的类型,,保障数据的安全性,常用的有:list<T> dictionary< k,V>

    List<> 对象名=new List<>();    添加元素的时候会严格控制类型(因为声明的时候在尖括号指明类型)   其他用法和Arraylist一样

    Dictionary<K,v> 对象名=new   Dictionary<K,v>();

    Dictionary<string,SE> 对象名=new   Dictionary<string,SE>();

    遍历:

    Foreach(KeyValuePair<string,SE> en in list){

    List.Key;   //获取key值

    List.value;  //获取Vaulue元素值

    }

    3.2.4:泛型类

    对于一些常常处理不同的数据类型的时候,使用泛型类,大大提高了代码的复用性。

    语法:

    Public class类名<T>{

    //

    }

    T:指的是类型参数,可以是自定义类型,也可以是基本类型

    第四章:深入类的方法

    4.1:构造函数

    1:构造函数特点

      方法名与类名一样

      没有返回值类型

      主要完成对象的初始化工作

    注意:如果自定义了构造函数,系统不会默认的提供隐形的构造函数了,需要自己手动添加一个无参的构造函数,来方便其他类实例化对象(如果没有那个无惨构造函数,就不能实例化)

    无参构造方法:语法

    Public 类名()

    {

             //方法体

    }

    带参构造方法:语法

    Public 类名(类型   变量)

    {

             //方法体

    }

    4.2:方法的重载

    4.2.1:方法函数的重载

    特点:

      方法名相同

      方法的参数类型或列表不同

      在同一个类中

    4.3:对象的交互

    在面向对象的世界里,万物皆对象,对象是相互独立的,互不干涉,但是在一定的外力作用下对象可以实现交互。

    每个类都有自己的特征和行为,我们把他们封装成属性和方法,对象之间通过属性和方法进行交流,可以认为方法的参数为对象之间交互传递消息

    第六章:初识继承和多态

    6.1:继承概述

    6.1.1:什么是继承

    1:继承就是继承父类所拥有的属性和方法,(拥有父类的特性)

    语法:访问修饰符   class   类名:父类名

    {

             //

    }

    6.1.2:base关键词和producted关键词

    Base:通过base.属性或方法是访问父类的属性或者方法

    Producted:受保护的,只有其之类或者本类可以访问此关键词修饰的语句

    修饰符

    类的内部

    子类

    其他类

    Public

    可以

    可以

    可以

    Producted

    可以

    可以

    不行

    Private

    可以

    不行

    不行

    Internal

    可以

    不可以

    可以

    6.1.3:子类构造函数

    1:隐式调用父类的构造函数

    在创建子类对象的时候,会默认的先调用父类的无参构造函数,在调用本类的构造函数。如果是没有无惨构造函数,就要指定一个带参构造函数,如果自己写了构造函数,就不会提供默认的无参构造函数。

    2:显示调用父类构造函数

    可以用base关键词显示的调用父类的构造函数。只要在之类的构造函数添加 :base(参数

    列表),就可以指定该子类的的构造函数调用父类的那一个构造函数。这样便可以实现继承属性初始化。然后在子类本身的构造函数中完成对子类特有的属性的初始化即可。

    6.2:继承的应用

    6.2.1:继承的特性

    1:继承的传递性

    子类    可以继承  父类  的特性,子类   的  子类  可以继承  子类   的特性

    2:继承的单根性

    子类不能继承多个父类,(不能实现多继承)

    6.2.2:is  a的 应用

    就是   x   is  a  y:就是指:x属于y的类型。就可以转换为y类,实现强制转换

    6.3:多态

    虚方法实现多态:父类定义一个虚方法,子类重写父类的方法。,然后执行的时候会执行子类的重写方法。就可以实现多态。

    语法:

    父类:  public  virtual  返回值类型    方法名()

    {

             //方法名要一样,不同的子父类中

    }

    子类:  public    override   返回值类型    方法名()

    {

             ////方法名要一样,不同的子父类中

            

    }

    第七章:深入理解多态

    7.1:里氏替换和多态

    7.1.1:里氏替换的概述

    1:就是子类替换父类可以出现在任何位置。但是父类不能替换子类。(子类可以替换父类,单父类不能替换子类),就是可以先申明一个父类,然后new  一个子类对象

    2:is  和as  操作符的使用

    If(X  is  y){

           X  as  y

    }

    就是如果x是y类型,就把x转换为y类型 

    7.1.2:父类类型作为参数

    里氏替换原则指子类对象可以替换父类对象。那么开发程序可以编写一父类作为形参数,然后实际传入子类对象。从而实现多态。

    7.2:抽象类和抽象方法

    7.2.1:为什么使用抽象类和抽象方法

    语法:访问修饰符  abstract   返回值类型  方法名();   //抽象方法没有逻辑代码块

    语法:  访问修饰符   abstrauct   class  类名{

             //

    }

      抽象类不能实例化。

      抽象类中不一定都是抽象方法。但是抽象类也可以容纳具体的实例方法。但是:抽象方法的类必须是抽象类。

    7.2.2:抽象类和抽象方法的应用

    1:如何实现抽象方法

    档重一个子类派生一个父类,子类将继承父类的所有特征。包括它为实现的抽象方法。抽象方法必须在其子类实现。除非它的子类也是抽象类。与子类重写父类虚方法。在子类也使用override关键词来重写抽象方法。

    第八章:可扩展标记语言XML

    8.1:XML概述

    8.1.1:为什么学习XML

    解决跨平台,夸操作系统的数据交互问题。

    8.1.2:什么是XML

    XML称为可扩展标记语言。可以实现不同的系统之间的数据交互。

      XML中的每队标记通常被称为节点、必须成对出现。用来描述这个节点的内容。在节点中存储该节点的信息

       

      XML中用于描述数据各个节点可以自由扩展,不是固定的节点,可以自定义。

      XML文件中的节点是区分大小写的。

    8.2:操作XML的方法

    8.2.1:解析XML文件

    XMLDocment  myXml= new  XmlDocment();

    myXml.Load(“文件名路径”);

    XmlLNode  engineer=myXml.DocuMentEleMent;    //上面几步可以读取到XMl的根节点

    Foreach(XmlNode node  in   engineer.ChildNodes)

    {

             //node.InnerText;   //获取到节点的内容

             //node.name;        //获取到节点的节点名

    对象

    属性和方法

    说明

    XmlDocument

    DocumentElement属性

    获取节点名

    ChildNodes

    获取所有子节点

    Load()

    读取整个XMl文件

    XmlNode

    InnerText

    当前节点的值

    Name属性

    当前节点的名称

    ChiidNodes

    当前节点的所有子节点

    }

    8.3:用TreeView显示数据

    8.3.2:动态绑定TreeView数据

      给TreeView添加节点用Add()方法

    TreeNode  Root=new TreeNode(“string类型的参数”);

    This.tvMenu.Add(Root);

      Add()方法的参数可以是文本   ,  返回值是当前节点对象

    TvMenu.Node.add(“string类型参数”);

      给选择的节点添加子节点

      This.tvMenu.seleedNode.Nodes.Add(“新闻频道”);

    属性

    说明

    Nodes

    TreeView中的所有数节点

    selectedNode

    选择的节点

    事件

    说明

    AfterSelect

    选择节点发生的事件

    属性

    说明

    Text

    节点的文本

    Index

    节点所有集合索引

    Level

    节点的深度

    Tag

    节点的隐藏值

    Nodes

    节点的所有下一集节点

    2:TreeView动态删除节点

      删除选择节点

    This.TvMenu.selectedNode.Remove();

      清空选择的节点的子节点

    This.TVMenu.SelectedNode.Nodes.Clear();

      清空所有的子节点

    This.tvMenu.nodes.Clear();

    第九章:文件操作

    9.1:文件概述

    用来保存临时的较少的数据的。

    9.2:如何读取文件

    (导入命名空间:using  System  IO;)

    步骤:

     创建文件流

     创建读取器或者写入器

     执行读/写操作

     关闭读取器或者写入器

     关闭文件流

    语法:

      FileSrtream mySf=  new  FIleStream(path,FileMode.Create);    ///path:路径参数  ,FileMode:枚举类型

      StreamWriter  mySw= new StreamWriter(mySf,Enconding.UTF-8); 或者 读取

    StreamReader  mySr= new StreamReader  (mySf,Enconding.UTF-8);

      MySw/mySr.write/Reader(“写入的内容参数”/读取的内容参数);

      mySw/mySr.close();

      mySf.close();

    StreamReader读取器:

    StreamReader主要用于读取流中的数据

    StreamReader.ReadLine();  读取一行数据  ,返回字符串

    StreamReader.ReadTOEnd(); 从当前位置读取到结束的位置

    StreamReader.Close();    关闭读取器

    9.3:文件和目录操作

    9.3.1:File类和Directory类

    File(文件类)类的常用方法

    返回值类型

    方法名称

    说明

    Bool

    Exists(stirng path)

    用于检查指定的文件是否存在

    Void

    Copy(string  sourcepath,nowPath)

    将指定路径的文件复制到其他路径去

    Void

    Move(string  sourcepath,nowPath)

    将指定文件移动到新路径

    Void

    Delete(string path)

    删除指定的文件

    Directory目录类

    返回值类型

    方法名称

    说明

    Bool

    Exists(string path)

    检查是否存在此目录(文件夹)

    Void

    Move(string  sourcepath,nowPath)

    将指定目录移动到新路径

    Void

    Delete(string path)

    删除指定的目录

    静态类与非静态类的区别

    静态类

    非静态类

    Static修饰

    不能Static修饰

    只包含静态成员

    刻意包含静态成员

    不能包含实例成员

    可以包含实例成员

    使用类名调用静态属性

    使用实例对象调用非静态的属性

    不能被实例化

    可以被实例化

    不能包含实例构造函数

    包含实例构造函数

    语法:class  类名

    {

             Public   static   数据类型  变量名;

             Public  static  返回的数据类型   方法名()

    {

                       //

    }

    }

    9.3.3:提供实例方法的文件和目录操作

    FileInfo类和File功能类似(只不过前者要实例化,后者不用背实例化就可以用了)

    FileInfo类

    属性

    说明

    Exists

    检查文件是否存在

    Extension

    获取文件的扩展名的字符串

    Name

    获取文件名

    FullName

    获取文件的完整目录(绝对路径)

    CopyTo(string)   返回:FileInfo类型

      将现有的文件复制到新的指定为地方

    Delete()     void

    删除指定的文件

    MoveTo();      void

    吧此文件移动到指定的一个新的路径位置

    DirectoryInfo类

    与directory类型类似

    用法步骤:

      DirectoryInfo  di= new DirectoryInfo(“指定的路径”);   //创建目录读取的对象

      DirectoryInfo[]   subDir=di.GetDirectories;           //返回当前的目录的子目录数组

      FileInfo[]   fi= new  GetFiles();                     //返回当前目录文件的列表(返回当前目录下的文件)

    既然选择了此行业,就要在这个行业闯出一片天!!!!!,我相信自要对编程感兴趣,一定会有所成就!!
  • 相关阅读:
    org.hibernate.HibernateException: No Session found for current thread
    TCP/IP协议 HTTP协议
    [ERROR][org.springframework.web.context.ContextLoader][main] Context initialization failed org.sprin
    oracle 导出表结构和数据,使用plsql
    jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder
    maven手动安装jar到本地仓库
    The reference to entity “idNo” must end with the ';' delimiter 异常处理
    activeMQ下载,安装,启动,关闭
    Oracle错误:ORA-01033
    -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
  • 原文地址:https://www.cnblogs.com/bdqnwangchao/p/7598348.html
Copyright © 2011-2022 走看看