zoukankan      html  css  js  c++  java
  • C#学习笔记

    1、C#程序结构

      C#是利用命名空间组织起来的,using将命名空间名所标识的命名空间内的类型成员导入当前编译单元中,从而可直接使用每个被导入的类型的标识符。

      Main方法是程序的入口点,C#中所有的Main方法都必须是静态的。

    static void Main()
    {
    }
    Main Function

    2、变量及类型

      装箱:将值类型转换为引用类型;拆箱:将引用类型转换为值类型。

      定义一个局部变量时,一定要对其初始化;尽可能少定义全局变量。

      布尔类型变量的值只能是true或false,不能与其他类型进行转换。

      Char在C#中表示一个Unicode字符。

      string是String的别名,表示Unicode字符的字符串;生成和构建一个长的字符串时,一定使用StringBuilder类型,而不用string类型。String对象是不可改变的,每次使用String类中的方法时都会在内存中创建一个新的字符串对象,这就需为该对象分配新的空间。若要修改字符串而不创建新的对象,则可使用StringBuilder类。

      集合类型:Array、ArrayList、Hashtable,相关代码:

    //数组的合并
    int[] arr1 = new int[] { 1, 2, 3, 4, 5 };
    int[] arr2 = new int[] { 6, 7, 8, 9, 10 };
    int n = arr1.Length + arr2.Length;
    int[] arr3 = new int[n];
    for (int i = 0; i < arr3.Length; i++)
    {
        if (i < arr1.Length)
            arr3[i] = arr1[i];
        else
            arr3[i] = arr2[i - arr1.Length];
    }
    Console.WriteLine("合并后的一维数组:");
    foreach (int i in arr3)
        Console.Write("{0}",i+" ");
    Console.WriteLine();
    
    int[,] arr4 = new int[2, 5];
    for (int i = 0; i< arr4.Rank;i++)
    {
        switch (i)
        {
            case 0:
                {
                    for (int j = 0; j < arr1.Length; j++)
                        arr4[i, j] = arr1[j];
                    break;
                }
            case 1:
                {
                    for(int j=0;j<arr2.Length;j++)
                        arr4[i,j]=arr2[j];
                    break;
                }
            }
    }
    Console.WriteLine("合并后的二维数组:");
    for (int i = 0; i < arr4.Rank; i++)
    {
        for (int j = 0; j <= arr4.GetUpperBound(arr4.Rank - 1); j++)
            Console.Write(arr4[i,j]+" ");
        Console.WriteLine();
    }
                
    //数组的拆分
    int[,] arr=new int[2,3]{{1,3,5},{2,4,6}};
    int[] arr_1=new int[3];
    int[] arr_2=new int[3];
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            switch (i)
            {
                case 0: arr_1[j] = arr[i, j]; break;
                case 1: arr_2[j] = arr[i, j]; break;
            }
        }
    }
    Console.WriteLine("数组一:");
    foreach(int k in arr_1)
        Console.Write(k+" ");
    Console.WriteLine();
    Console.WriteLine("数组二:");
    foreach(int k in arr_2)
        Console.Write(k+" ");
    Console.WriteLine();
    
    //ArrayList类
    ArrayList List1 = new ArrayList();
    for (int i = 0; i < 10; i++)
        List1.Add(i);
    
    int[] arrlist = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    ArrayList List2 = new ArrayList(arrlist);
    List2.Insert(3, 7);
    
    ArrayList List3 = new ArrayList(10);
    for (int i = 0; i < List3.Count; i++)
        List3.Add(i);
    
    Console.WriteLine();
    
    //哈希表类
    Hashtable hashtable =new Hashtable();
    hashtable.Add("id", "BH0001");
    hashtable.Add("name","TM");
    hashtable.Add("sex","male");
    Console.WriteLine(hashtable.Count);
    Console.WriteLine("	 键	 值");
    foreach (DictionaryEntry dicEntry in hashtable)
        Console.WriteLine("	"+dicEntry.Key+"	"+dicEntry.Value);
    
    Console.ReadLine();
    View Code

    3、属性和方法

      C#属性有两种:在公共语言运行库中定义的属性(特性)、自定义属性(get和set访问器),如下所示:

    namespace CSharpTest
    {
        [DefaultPropertyAttribute("StationName")]
        class Station
        {
            private string _StationName;
            private double _Lon = 103;
            private double _Lat = 38;
            private Color _color;
            private string _file = string.Empty;
            private Font _font;
    
            [CategoryAttribute("常规"), DescriptionAttribute("文件名"), ReadOnlyAttribute(true)]
            public string FileName
            {
                get { return _file; }
                set { _file = value; }
            }
            [CategoryAttribute("显示"), DescriptionAttribute("颜色"), DisplayNameAttribute("颜色")]
            public Color Color
            {
                get { return _color; }
                set { _color = value; }
            }
            [CategoryAttribute("显示"), DescriptionAttribute("字体")]
            public Font Font
            {
                get { return _font; }
                set { _font = value; }
            }
    
            public string StationName
            {
                get { return _StationName; }
                set { _StationName = value; }
            }
            public double Lon
            {
                get { return _Lon; }
                set { _Lon = value; }
            }
            public double Lat
            {
                get { return _Lat; }
                set { _Lat = value; }
            }  
        }
    }
    View Code

      get访问器和方法体相似,须返回属性类型的值;而set访问器类似于返回类型为void的方法,它使用称为value的隐式参数。

      类的实例化对象不能调用静态方法,必须直接使用类名调用。

      C#的事件(Event)和委托(Delegate)机制。

    4、结构、类和接口

      结构的实例化可以不使用new运算符;结构可以声明构造函数,但它们须带参数;在结构声明中,除非字段被声明为const或static,否则无法初始化。

      在没有对类实例化前,无法用类名调用类中的方法或字段。

      常用类修饰符:new、private、protected、public、internal(只有其所在的类才能访问)、abstract(抽象类)、sealed(密封类,不允许被继承)。 

      C#类特性:封装、继承(只支持单继承)、多态。

      接口用interface声明,通过类继承来实现。通过接口可实现多重继承,一个类虽只能继承一个基类,但可继承任意接口。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Test1
    {
        //声明三个接口
        interface IPeople
        {
            string Name
            {
                get;
                set;
            }
            string Sex
            {
                get;
                set;
            }
        }
        interface ITeacher : IPeople
        {
            void teach();
        }
        interface IStudent : IPeople
        {
            void study();
        }
        //类继承自多个接口,并实现接口
        class Program:IPeople,ITeacher,IStudent 
        {
            string name = "";
            string sex = "";
            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
            public string Sex
            {
                get
                {
                    return sex;
                }
                set
                {
                    sex = value;
                }
            }
            public void teach()
            {
                Console.WriteLine(Name + " " + Sex +" 教师");
            }
            public void study()
            {        
                Console.WriteLine(Name + " " + Sex +" 学生");
            }
            static void Main(string[] args)
            {
                Program program = new Program();//实例化对象
                ITeacher iteacher = program;
                iteacher.Name = "Tea";
                iteacher.Sex = "";
                iteacher.teach();
                IStudent istudent = program;
                istudent.Name = "Stu";
                istudent.Sex = "";
                istudent.study();
                Console.ReadKey();
            }
        }
    }
    View Code

      抽象类与接口的:

    • 抽象类与接口都不能直接实例化,但可声明它们的变量;
    • 抽象类中可定义成员的实现,但接口不可以;
    • 抽象类可包含字段、构造和析构函数、静态成员或常量等,但接口中不可以;接口可包含事件、索引器、方法和属性;
    • 接口中的成员必须是公共的;

      声明密封方法时,sealed修饰符总是和override修饰符同时使用。

      使用partial定义分部类,分部类的声明须与其他部分位于同一命名空间。

    5、异常处理

      try...catch...finally语句

    6、迭代器与泛型

      迭代器(iterator)有时又称游标(cursor),是可返回相同类型的值的有序序列的一段代码,是程序设计的软件设计模式(Design Pattern),可在容器上遍历接口,设计人员无需关心容器的内容。

      C#迭代器代码使用yield return语句依次返回每个元素,yield break语句终止迭代;其返回类型须为IEnumerable或IEnumerator中的任意一种。创建迭代器最常用的方法是对IEnumerator接口实现GetEnumerator方法。迭代器的定义及使用如下所示:

    //迭代器的定义
    string[] MyFamily = { "父亲", "母亲", "弟弟", "妹妹" };
    public System.Collections.IEnumerator GetEnumerator()
    {
        for (int i = 0; i < MyFamily.Length; i++)
        {
            yield return MyFamily[i];
        }
    }
    
    //迭代器的使用
    Family myfamily = new Family();
    foreach (string str in myfamily)
    {
        richTextBox1.Text += str + "
    ";
    }
    Iterator Code

      泛型是用于处理算法、数据结构的一种编程方法,主要是为了提高代码的重用性。泛型的使用如下所示:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Finder
    {
        public class Finder
        {
            public static int Find<T>(T[] items, T item)
            {
                for (int i = 0; i < items.Length; i++)
                {
                    if (items[i].Equals(item))
                    {
                        return i;
                    }
                }
                return -1;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                int i = Finder.Find<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 6);
                Console.WriteLine("6 在数组中的位置:" + i.ToString());
                Console.ReadKey();
            }
        }
    }
    View Code

    7、IO操作

      文件、文件夹、XML、ini配置文件、注册表、数据库

    8、网路编程

      Sockets、Mail、Web

    9、线程

    10、窗体

      Form窗体、MDI窗体、各种控件(ListBox、ListView、TreeView、PropertyGrid、DockPanel、水晶报表、打印)、GDI+图形图像技术

      ListView控件的使用如下所示:

    listView1.View = View.Details;
    listView1.GridLines = true;
    listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 
    this.listView1.Columns.Clear();
    this.listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;
    this.listView1.Columns.Add("编号", 60, HorizontalAlignment.Right);
    this.listView1.Columns.Add("姓名", 60, HorizontalAlignment.Right);
    this.listView1.Columns.Add("年龄", 60, HorizontalAlignment.Right);
    this.listView1.Columns.Add("电话", 60, HorizontalAlignment.Right);
    this.listView1.Visible = true;
    for (int i = 1; i <= 20; i++)
    {
        ListViewItem li = new ListViewItem();
        li.SubItems[0].Text = i.ToString();
        li.SubItems.Add("aaa");
        li.SubItems.Add("25");
        li.SubItems.Add("11223344");
        this.listView1.Items.Add(li);
    }
    ListView Code

       以上均为本人对《C#从入门到精通》这本书的总结、概括,其中大部分只列出了一些要点。上述若有错误,还请指正,谢谢。

  • 相关阅读:
    Word转pdf
    jquery 中json数组的操作 增删改
    Js、Jquery定时执行(一次或者重复多次,取消重复)
    sql server 2008 (不允许保存更改,您所做的更改要求删除并重新创建以下表) 的解决办法
    C#中 ArrayList 的使用
    Jquery正则表达式公式
    C#判断字符串是否存在字母及字符串中字符的替换实例
    纳闷的EF异常:在提供程序连接上启动事务时出错
    C# WinForm获取当前路径汇总
    Entity Framwork 6 编译出错的问题(VS2012)
  • 原文地址:https://www.cnblogs.com/gaohongchen01/p/4784814.html
Copyright © 2011-2022 走看看