C#學(xué)習(xí)筆記及方法

    時間:2020-12-29 12:00:24 學(xué)習(xí)方法 我要投稿

    C#學(xué)習(xí)筆記及方法

      C#是一門面向?qū)ο蟮恼Z言,具有面向?qū)ο蟮幕咎卣鳎橄蟆⒎庋b、繼承、多態(tài)等性質(zhì)。學(xué)習(xí)C#除了一些基本的語法,還得學(xué)習(xí)一些新的特性,比如說:泛型、多線程、集合、反射等,下面就選其中一些來學(xué)習(xí)吧!

    C#學(xué)習(xí)筆記及方法

      一、C#中的各種器

      A、 C#構(gòu)造器-構(gòu)造函數(shù)

      如下:

      復(fù)制代碼 代碼如下:

      //構(gòu)造器1

      public Products(int id)

      {

      _Id = id;

      }

      //構(gòu)造器2,使用this來調(diào)用構(gòu)造器1

      public Products(int id, string Name, string Band)

      : this(id)

      {

      _ProductName = Name;

      _ProductBand = Band;

      }

      靜態(tài)構(gòu)造器-用來對類進(jìn)行初始化信息,它不是顯示調(diào)用的,在首次訪問類時將自動調(diào)用,用來初始化類的一些基本信息而不是對象,但最好不要使用靜態(tài)的構(gòu)造器,代碼如下:

      復(fù)制代碼 代碼如下:

      static Products() { }//靜態(tài)構(gòu)造器

      public Products() { }

      B、初化器-在沒有帶參數(shù)的構(gòu)造器時,我們可以用初始化器對對象的共公屬性進(jìn)行初始化

      如下:

      復(fù)制代碼 代碼如下:

      //產(chǎn)品的集合List

      ListListProduct = new List()

      {

      new Products() { _Id = 1, _ProductName = "whc" },//使用{}是調(diào)有用初始化器,對屬性進(jìn)行初始化

      new Products() { _Id = 1, _ProductName = "whc1", _ProductBand = "ctbu" },

      new Products() { _Id = 1, _ProductName = "whc2", _ProductBand = "ctbu" }

      };

      C、終結(jié)器

      終結(jié)器是在一次對象最后一次活動之后,并在程序終止之前執(zhí)行。拉圾回收器會在回收過程中,找到帶有終結(jié)器的對象,然后加入到終結(jié)隊列,線程遍歷完了,就調(diào)用終結(jié)隊列上對象的終結(jié)器來回收資源

      二、C#中那些重要的知識

      A、委托與事件

      委托

      C#中將一個方法作為一個參數(shù)傳遞給其它方法使用,實現(xiàn)這樣功能的模式叫做委托

      1、委托的類型:是強(qiáng)類型,因為在聲明委托方法時,指定的參數(shù),在調(diào)用這個委托時必須傳遞相同類型的參數(shù)與參數(shù)個數(shù)

      2、委托的內(nèi)部機(jī)制:C#中所有的委托都繼承自System.Delegate,但是我們不能繼承它來實現(xiàn)自定義的委托,可以使用delegate關(guān)鍵字來定義

      3、委托的定義:使用delegate關(guān)鍵字來使用

      4、委托的實例化:定義一個與委托相同類型的函數(shù),作為委托的參數(shù)傳遞,不需要用new關(guān)鍵字進(jìn)行實例化,它可以通過委托推斷,在C#1.0中,在傳遞方法時,需要用new delegate(Method)

      5、委托的使用:

      復(fù)制代碼 代碼如下:

      class DelegateClass

      {

      //一個泛型的委托,可以不同類型的參數(shù)進(jìn)行處理

      public delegate void AlculateMethod(T first, T second);

      }

      class MehtodConllection

      {

      public void AlculateAdd(T first, T second)

      {

      string third = first.ToString() + second.ToString();

      System.Console.WriteLine(third);

      }

      public void AlculateDelete(int first, int second)

      {

      System.Console.WriteLine(first - second);

      }

      public void AlculateAddOther(T first, T second)

      {

      string third = first.ToString() + "Hello Word" + second.ToString();

      System.Console.WriteLine(third);

      }

      }

      private static void _Demo4()

      {

      //方法的集合

      MehtodConllection mc = new MehtodConllection();

      //泛型的委托聲明

      DelegateClass.AlculateMethodDemo = null;

      //添加委托方法

      Demo += mc.AlculateAdd;

      //

      Demo += mc.AlculateAddOther;

      //調(diào)用方法,所有在委托中的方法都能被執(zhí)行

      Demo("str", "sterte");

      }

      事件

      事件是一種特殊的委托,在聲明委托時,添加一個event關(guān)鍵字

      步驟:

      1、定義委托的類型,相當(dāng)于一個類,如: public delegate void ActionMethod();

      2、定義事件委托變量,用1、中的委托類型定義,如: public event ActionMethod amd;

      3、調(diào)用定義的事件,觸發(fā)器,如:

      復(fù)制代碼 代碼如下:

      class Cat

      {

      //定義委托方法

      public delegate void ActionMethod();

      //聲明事件委托

      public event ActionMethod amd;

      //觸發(fā)事件

      public void CatShout()

      {

      System.Console.WriteLine("貓叫了,事件觸發(fā)了!!!");

      amd();

      }

      }

      4、向事件中添加方法,將方法與事件綁定在一起,以便在觸發(fā)時一起執(zhí)行,如:

      復(fù)制代碼 代碼如下:

      private static void _Demo15() {

      Cat cat = new Cat();

      HostPerson hp = new HostPerson();

      Mouse mouse = new Mouse();

      cat.amd += mouse.runing;

      cat.amd += hp.WeekUp;

      cat.CatShout();

      }

      5、最后觸發(fā)事件

      B、反射與特性

      反射

      1、反射的作用:

      (1)、訪問程序集中的元數(shù)據(jù),比如說,方法屬性修鉓符

      (2)、使用元數(shù)據(jù),在運行時動態(tài)的調(diào)用元數(shù)據(jù)的成員與屬性等,而不是在編譯時進(jìn)行綁定

      2、反射是擇指對一個程序集中的元數(shù)據(jù)進(jìn)行檢查的過程,并且可以列舉程序集的類型與屬性,以及使用一些特定的對象調(diào)用上面的成員

      3、使用System.Type訪問元數(shù)據(jù)

      類型的元數(shù)據(jù)System.Type是一個實例,這個實例提供了一些方法,這些方法可以列舉元數(shù)據(jù)的成員,主要方法有以下幾種:

      Type.Name、Type.IsPublic、Type.BaseType、Type.GetInterface()、Type.Assemble、Type.GetProperties()、Type.GetMethod()、Type.GetField()、Type.GetCustomAttributes()等屬性

      (1)、使用GetType()得到元數(shù)據(jù)的類型對象(System.Type)

      例:

      類一:

      復(fù)制代碼 代碼如下:

      class CustomClass

      {

      private string Name = "Test";

      public string _Name = "Demo";

      private int index { get; set; }

      public int _index { get; set; }

      private void GetName()

      {

      }

      public void Get_Name()

      {

      }

      }

      類二:同時使用了typeof與GetType()來得到類型對象

      復(fù)制代碼 代碼如下:

      public void Exec()

      {

      CustomClass cc = new CustomClass();

      //得到當(dāng)前類型的實例對象

      Type type = cc.GetType();

      //得到當(dāng)前類型的實例對象使用typeof

      //Type type = typeof(CustomClass);

      //遍歷public的屬性,而不是字段,使用GetProperties()

      foreach (PropertyInfo property in type.GetProperties())

      {

      //得到屬性名

      System.Console.WriteLine(property.Name);

      //得到屬性的類型

      System.Console.WriteLine(property.PropertyType);

      //得到反射的.類型,就是反射對象的類名

      System.Console.WriteLine(property.ReflectedType);

      //得到成員類型,是屬性還是方法

      System.Console.WriteLine(property.MemberType);

      }

      System.Console.WriteLine("------------------------------------------");

      //得到當(dāng)前對象的公共方法,包含公共屬性的方法get,set

      foreach (System.Reflection.MethodInfo method in type.GetMethods())

      {

      //方法名

      System.Console.WriteLine(method.Name);

      //成員的類型

      System.Console.WriteLine(method.MemberType);

      }

      }

      結(jié)果:

      (2)、得到與設(shè)置屬性的值

      復(fù)制代碼 代碼如下:

      //設(shè)置屬性的值

      property.SetValue(cc, 45, null);

      //得到屬性的值

      System.Console.WriteLine(property.GetValue(cc, null).ToString());

      (3)、調(diào)用方法Invoke()函數(shù)

      復(fù)制代碼 代碼如下:

      MethodInfo demo = type.GetMethod("Get_Name");

      demo.Invoke(cc, null);

      得到一個無參的方法Get_Name,若有參null應(yīng)為參數(shù)的數(shù)組

      如: //調(diào)用有參的

      復(fù)制代碼 代碼如下:

      MethodInfo test = type.GetMethod("GetName");

      string[] param = { "12" };

      test.Invoke(cc, param);

      特性 (attribute)

      1、特性是用來描述或修飾元數(shù)據(jù)的額外的信息,比如說:類、屬性、程序集等

      2、自定義特性,繼承自Attribute類

      如下:

      復(fù)制代碼 代碼如下:

      class CustomAttribute : Attribute

      {

      public CustomAttribute();

      public CustomAttribute(AttributeTargets validOn);

      public bool AllowMultiple { get; set; }

      public bool Inherited { get; set; }

      public AttributeTargets ValidOn { get; }

      }

      使用:

      復(fù)制代碼 代碼如下:

      [CustomAttribute(AttributeTargets.All)]

      class CustomClass

      {

      [CustomAttribute(AllowMultiple = true)]

      [Custom(Inherited = true)]

      private string Name = "Test";

      public string _Name = "Demo";

      private int index { get; set; }

      public int _index { get; set; }

      }

      C、擴(kuò)展方法的使用與Lambda表達(dá)式

      擴(kuò)展方法

      當(dāng)你不能修改一個類的時候,擴(kuò)展方法是一個方便給這個類添加其它方法的方式

      1、擴(kuò)展方法的定義:擴(kuò)展方法使用this這個關(guān)鍵字,將一個方法綁定到this所指向的類型(如:類)的成員中對,從而就可以通過這個類的對象來調(diào)用這個方法,在MVC中,擴(kuò)展,HtmlHelper類是很有用的,如下代碼:

      復(fù)制代碼 代碼如下:

      public static class PersonExtension

      {

      public static void Extension(this PersonSingle ps, string name)

      {

      System.Console.WriteLine("Name is " + name);

      }

      }

      將Extension(string name)這方法添加到PersonSingle中去,然后就可以通過對象調(diào)用這個方法

      PersonSingle類:

      復(fù)制代碼 代碼如下:

      public class PersonSingle

      {

      public void Show()

      {

      System.Console.WriteLine("PersonSingle Method!!!");

      }

      }

      測試:

      復(fù)制代碼 代碼如下:

      private static void _Demo16()

      {

      PersonSingle ps = new PersonSingle();

      ps.Show();

      ps.Extension("whc");

      }

      2、擴(kuò)展方法的訪問權(quán)限要與所擴(kuò)展的類的方法一致,這里都是public

      3、擴(kuò)展方法是寫在一個靜態(tài)類中的靜態(tài)方法

      Lambda表達(dá)式

      Lambda表達(dá)式是一種比匿名方法更加簡潔的一種匿名函數(shù)語法,其主要分為二類:一是語句lambda,二是表達(dá)式lambda

      1、語句Lambda:是一種匿名方法的簡化語法,其中不包含delegate關(guān)鍵字,只需要使用lambda運算符=>,是一個語句塊

      例:

      復(fù)制代碼 代碼如下:

      Demo += (string first, string second) =>

      {

      System.Console.WriteLine();

      };

      2、表達(dá)式Lambda:是一個表達(dá)式,而不是一個語句塊

      例:

      復(fù)制代碼 代碼如下:

      Demo = (first, second) => first.ToString();

      3、Lambda表達(dá)式中能使用外部的變量

      總結(jié)

      那些年學(xué)習(xí)C#,作了一些筆記,此文大都直接從筆記中拷貝,當(dāng)然還有很多沒有提到,將在下次追加一些;此文以回憶那些年學(xué)習(xí)的日子。

    【C#學(xué)習(xí)筆記及方法】相關(guān)文章:

    速錄學(xué)習(xí)技巧及方法08-13

    速錄學(xué)習(xí)及提速方法08-13

    速錄技巧及學(xué)習(xí)方法08-07

    速錄學(xué)習(xí)方法及技巧11-11

    CAD學(xué)習(xí)方法及技巧08-16

    學(xué)習(xí)數(shù)學(xué)的小技巧及方法07-30

    A-level數(shù)學(xué)及學(xué)習(xí)方法08-27

    速錄的學(xué)習(xí)方法及技巧08-10

    亞偉速錄學(xué)習(xí)方法及技巧11-13

    日語口語學(xué)習(xí)方法及技巧08-29

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      亚洲国产精品美女久久久久 | 中文字幕乱码免费专区精品视频 | 亚洲日韩欧美综合 | 亚洲免费精品一区二区三区 | 天天综合亚洲色在线精品 | 日本欧美高清乱码一区二区 |