C#基础知识点

主要包含C#常用语句、语言特征、面向对象编程基础、集合和索引。

C#常用语句
  • 注释语句

    1. // 单行注释
    2. /* … */ 多行注释
    3. /// xml注释
  • if、switch、for、while、do while

  • foreach

    1. 与for语句类似,都是重复执行指定的一组语句。但foreach语句专门用于遍历数组或对象集合中的每个元素。
    2. 语法格式:

      foreach (数据类型符 变量名 in 数组或集合)

      {

      循环体

      }
  • 迭代器

    1. 迭代器模式被IEnumerator和IEnumerable及其对应的泛型接口所封装。如果一个类实现了IEnumerable接口,那么就能够被迭代;调用GetEnumerator方法将返回IEnumerator接口的实现,它就是迭代器本身。迭代器类似数据库中的游标,他是数据序列中的一个位置记录。迭代器只能向前移动,同一数据序列中可以有多个迭代器同时对数据进行操作;
    2. C# 2.0 后通过yield return语句简化迭代器的实现;
  • try语句,异常保护语句

    Try

    [〈try语句块〉]

    [ Catch

    [〈catch语句块〉] ]

    [Finally

    [〈finally语句块〉] ]
    ####语言特征

  • 泛型:

    1. 泛型栈的定义

      Public class Stack

      {
      T[] m_items;

      public void Push(T item)
      { … }

      public T Pop()
      { … }
      }
    2. 栈的使用

      Stack stack=new Stack();

      stack.Push(1);

      Int number=stack.Pop();
    3. 特征:内部算法和数据操作保持不变,而实际数据类型可以在使用时指定
    4. 优点:支持任何类型(包括自定义);减少代码冗余;类型安全;性能提高(值类型提高200%,引用类型提高100%)
  • 可空类型

    1. 是System.Nullable结构类型的实例
    2. 可空类型可以表示其基础值类型正常范围内的值,再加上一个null值
    3. System.Nullable结构:

      public bool HasValue { get; }

      获取一个值,指示当前的确对象是否有值;

      public T Value { get; }

      获取当前的确System.Nullable值;

      public T GetValueOrDefault()

      检索当前System.Nullable对象的值,或该对象的默认值;
  • 分部类

    1. 定义:

      partial class Stack

      {
      object[] m_items;

      public void Push(object item) { …}

      }

      partial class Stack

      {
      public object Pop()

      { …}

      }
    2. 应用范围:大型项目开发;Windows Form/Web Form等
    3. 规定:所有部分都必须使用partial关键字;各个部分必须具有相同的可访问性;各个部分可以指定不同的基接口,最终类型实现所有分部声明所列出的全部接口。
  • 反射

    1. 用途:在程序或装配件中查找有关类型的信息,或者从装配件中读取元数据。反射包含的大多数类都在System.Reflection命名空间中。
    2. 常用:
    3. Type类:查找有关类型的相关信息。

      获取指向给定类型的Type对象有2种常用方式

      (1)Type t =typeof(double);

      (2)Type t = Type.GetType(“System.Double”)。
    4. Assembly类:在System.Reflection命名空间中定义,它允许程序员访问给定装配件的元数据。
  • Lambda表达式

    1. 介绍:简化委托的代码编写形式,当函数语句少且需使用委托时较方便,代码更简洁高效。
    2. 基本用法:
      Lambda表达式是一个可用于创建委托或表达式树类型的匿名函数。

      语法为 (输入参数列表)=>{表达式或语句块}

      Lambda运算符(=>)来描述,读作“goes to”。
    3. 示例:
    4. x=>xx //输入参数为x,返回xx
    5. (x,y)=> x == y //输入参数为x和y,返回布尔值
    6. ()=SomeMethod() //无参数,返回函数值
  • 自动属性

    1. C#编译器遇上空的get/set属性的话,它会自动在类中生成一个私有成员变量,对这个变量实现一个公开的getter 和setter。
    2. eg.
    3. public string FirstName { get; set; }
    4. public string LastName { get; set; }
  • 互操作

    1. 由CLR管理的托管代码与非托管代码之间的交互操作
    2. 互操作性三种方式:
    3. 在.NET应用程序中使用COM对象;
    4. 在COM客户程序中使用.NET组件;
    5. 调用本地方法的Platform Invoke(平台调用);

      using System.Runtime.InteropServices;

      [DllImport(“user32.dll”)] static extern int
      MessageBoxA(int hWnd, string msg, string caption, int type );
  • 正则表达式

    1. 定义:用某种模式去匹配指定字符串的一种表达方式
    2. 由普通字符和元字符组成
    3. 普通字符:字母、数字、汉字等;
    4. 元字符:可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。
    5. 使用示例:
    6. Regux类, 表示不可变(只读)正则表达式类。
    7. Match类, 表示正则表达式下一个匹配的结果(只读)
    8. MatchCollection类, 成功的非重叠匹配的集合(只读)
    9. Group类, 匹配子字符串有多组时,单个捕获组的结果

      Regex r = new Regex(“abc”);

      MatchCollection mc = r.Matches(“123abc4abcd”);

      int count = mc.Count;

      String[] results = new String[count];

      int[] matchPosition = new int[count];

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

      {

      results[i] = mc[i].Value;

      matchPosition[i] = mc[i].Index;

      Console.WriteLine(“第{0}个匹配结果:{1},位置:{2}”,i+1, results[i], matchPosition[i]);

      }

####面向对象编程基础

  • 类:类是对所有具有共同特征的事物的抽象,是一个抽象的概念。类可以视为是一个具有类似特征与共同行为的对象的“模板”。这个模板通过定义属性来存储数据,通过定义操作来使用这些数据,类同时也定义了一套规则来允许或禁止访问它的属性和操作。
  • 对象:面向对象技术是基于对象概念的,一个面向对象的程序的每一个成分都是对象。程序是通过对象的建立及对象之间的通信来执行的。
    对象是一个属性集合及其操作的封装体。每个对象都有属性和方法。
  • 每个对象都包含一组数据,用来描述对象的特征。这组描述对象特征的数据称为对象的属性。它描述了对象的状态和特征,可以是系统或用户定义的数据类型,也可以是一个抽象的数据类型。属性一般只能通过执行对象的操作(方法)来改变。对象属性值的集合称为对象的状态。eg. form1.Text
  • 对象的事件,事件是对象能够识别的动作,也就是对象上所发生的事情。如,汽车(对象)正在行驶时踩刹车(事件),汽车将停车(对象对事件的响应,也就是事件导致的结果)。C#.NET中,事件是预先定义好的能够被对象所识别的动作,是导致执行某过程的通知。对每个对象来说,事件的类型是固定的,用户不能改变。但对事件的具体响应是可以自行设计的。eg.按钮控件的Click事件,窗体的Close事件。
  • 对象的方法,是指对象的行为方式,是指定义在对象属性上的一组操作方法的集合,说明了对象的行为和功能,即对象要执行的功能。方法又称为操作或服务,也称为行为。是为响应消息而完成的算法,表示对象内部实现的细节。对象的方法集合体现了对象的行为能力。eg.textBox1.Clear();文本框清空,button1.Focus();按钮获得焦点
  • 类的三大特性:
    1. 封装性,指将不同功能和属性包装、捆绑在一个抽象的实体中,并隐藏其内部的复杂性。sealed可声明密封类。
    2. 继承性:派生类只能从一个类中继承,即单继承。派生类继承基类的成员,但不能继承基类构造函数。类的继承可以传递。
    3. 多态性:指相同类型实体的不同派生实体的实例可用同一个名称来指定,并共享特性。可使对象适应外部的变化。为了在派生类中更改基类的数据和行为,可以:
    4. 使用new关键字重新定义类的成员
    5. 使用virtual和override定义类成员
    6. 调用基类的方法,使用base关键字
  • 构造函数:public,与类名相同,无返回类型
  • readonly字段,运行时可赋值一次,const字段编译时确定值
  • 对象生命周期:
    1. 使用new运算符创建对象并要求获得内存;
    2. 对象初始化,包括对象的数据成员的初始化;
    3. 使用对象,包括访问对象的数据成员、调用对象的方法成员;
    4. 对象释放前释放对象所占用的资源,如关闭磁盘文件、网络连接等;
    5. 释放对象,回收内存(垃圾回收器自动完成)。
    6. 其中,第2阶段可通过调用对象的构造函数来完成,第4阶段可通过析构函数来完成。
  • 析构函数特点:
    1. 不能在结构中定义析构函数,只能对类使用析构函数;
    2. 一个类只能有一个析构函数;
    3. 无法继承或重载析构函数;
    4. 析构函数既没有修饰符,也没有参数;
    5. 在析构函数被调用时,.NET的公共语言运行时自动添加对基类Object.Finalize方法的调用,以清理现场,因此在析构函数中不能包含对Object.Finalize方法的调用。
    6. 在默认情况下,编译器自动生成空的析构函数,因此C#不允许定义空的析构函数。其实析构函数性能较差,并不推荐使用,如果需要尽快关闭和释放所占用的资源,应实现一个强制回收方法,一般称为Close()或Dispose()。

####高级程序设计

  • 静态

    1. 静态成员通过static关键字来标识,可以是静态方法、字段、属性或事件。静态成员与非静态成员的不同在于:静态成员属于类,而不属于类的实例,因此需要通过类而不是通过类的实例来访问;而非静态成员则总是与特定的实例(对象)相联系。
    2. 静态类使用static关键字来声明指示它仅包含静态成员,不能使用new关键字创建静态类的实例。在实际应用中,当类中的成员不与特定对象关联的时候,就可以把它创建为静态类。
    3. 静态类有下以特点:
    4. 静态类仅包含静态成员;
    5. 静态类不能被实例化;
    6. 静态类是密封的;
    7. 静态类不能包含实例构造函数;
  • 多态

  • 抽象类

  • 接口

  1. 多重接口实现,C#不允许多重类继承,但C#允许多重接口实现,定义时基类必须在接口之前,如:
    public class Mobile :
    Phone,IUsb, Ibluetooth

    Public class Mp3:IUsb
  2. 访问接口的方法
    Mp3 m = new Mp3();

    lblShow.Text=m.TransData(“计算机”,“MP3设备”);

    或者

    Mp3 m = new Mp3();

    IUsb iu = (IUsb)m;

    lblShow.Text = iu.TransData(“计算机”, “MP3设备”);

####集合和索引

  • 集合:

    1. 是通过高度结构化的方式存储任意对象的类。
    2. 集合不仅能随意调整大小,而且对存储或检索存储在其中的对象提供了更多的方法。集合可以把一组类似的对象组合在一起。
    3. 对象类型的集合位于System.Collections命名空间;集合类的功能是通过实现System.Collections命名空间中的接口而获得的。
    4. .NET Framework提供的常用集合包括数组、列表、哈希表、字典、队列和堆栈等基本类型,还包括有序列表、双向链表和有序字典等派生集合类型。
    5. .NET Framework也提供了一些专用集合用于处理特定的元素类型。
    6. StringCollection是字符串集合,由若干个字符串组成。字符串集合与字符串数组的区别在于,字符串集合提供了大量的可直接调用的方法,包括Add(添加)、 Clear(清空)、Contains(是否包含特定字符串)、IndexOf(搜索特定字符串)、Insert(插入)和Remove(移除特定字符串)等。
  • ArrayList

    1. ArrayList是一个可动态维护长度的集合,它不限制元素的个数和数据类型,可以把任意类型的数据保存到ArrayList集合中。
    2. 数组类Array与动态数组类ArrayList的区别:
    3. Array的大小固定,ArrayList可根据需要自动扩充;
    4. 在Array中一次只能获取或设置一个元素的值,而在ArrayList中允许添加、插入或移除某一范围的元素;
    5. Array的下限可自定义,ArrayList的下限始终为零;
    6. Array可具有多个维度, ArrayList始终只是一维的;
    7. Array 位于System命名空间中,ArrayList 位于System.Collections 命名空间中。
    8. 用法示例:
    9. void Remove( Object obj) //删除指定对象名的对象
    10. void RemoveAt(int index) //删除指定索引的对象
    11. void Insert( int index, Object value) //在指定位置插入对象
    12. void Clear() //清除集合内的所有元素
    13. (类型) ArrayList[index] //按指定索引(下标)取得对象
    14. ArrayList.Add(obj);
    15. Arraylist.Count 获得成员数
    16. foreach(obj one in arraylist){…}
  • 其他

    1. Hashtable索引器

      Hashtable htBooks=new Hashtable();

      Book bk=new Book(bookID,bookTitle,bookPrice);

      htBooks.Add(bookId,bk);
    2. Stack栈

      Stack stack = new Stack();

      stack.Push(“往上打”);
      stack.Pop();
    3. Queue队列
      Queue queue = new Queue([队列长度][, 增长因子]);
      Queue queue = new Queue(20, 3.0f);
      Enqueue入队列,Dequeue方法出队列
  • 索引器

    C#中的类成员可以是任意类型,包括数组或集合。当一个类包含了数组或集合成员时,索引器将大大简化对数组或集合成员的存取操作。

  • 泛型

    .NET Framework在System.Collections.Generic和System.Collections.ObjectMode命名空间中就提供了泛型集合类,如List、Queue、Stack、Dictionary等,它们都有增加、删除、清除、排序和返回集合元素值的操作方法,并写适用于任意类型的数据。

    1. List列表,是ArrayList的泛型等效类
      List listBooks=new
      List();
      listBooks.Add(bk);
    2. Stack 泛型栈
    3. Queue泛型队列
    4. Dictionary<K,V> 泛型字典
    5. HashSet哈希集,HashSet类提供高性能的集运算。集合是一组不重复出现且无特定顺序的元素;HashSet对象的容量是该对象可容纳的元素个数。并且其容量将随该对象中元素的添加而自动增大;

      HashSet intHashset=new HashSet();

      intHashSet.Add(aInt);
  • 泛型类

    1. 当一个类的操作不针对特定或具体的数据类型时,可把这个类声明为泛型类。泛型类最常用于集合。

      Person<int,string> super=new Person<int,string>(7,”James”);
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值