中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      C#學習筆記及方法

      時間:2020-12-29 12:00:24 學習方法 我要投稿

      C#學習筆記及方法

        C#是一門面向對象的語言,具有面向對象的基本特征,抽象、封裝、繼承、多態等性質。學習C#除了一些基本的語法,還得學習一些新的特性,比如說:泛型、多線程、集合、反射等,下面就選其中一些來學習吧!

      C#學習筆記及方法

        一、C#中的各種器

        A、 C#構造器-構造函數

        如下:

        復制代碼 代碼如下:

        //構造器1

        public Products(int id)

        {

        _Id = id;

        }

        //構造器2,使用this來調用構造器1

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

        : this(id)

        {

        _ProductName = Name;

        _ProductBand = Band;

        }

        靜態構造器-用來對類進行初始化信息,它不是顯示調用的,在首次訪問類時將自動調用,用來初始化類的一些基本信息而不是對象,但最好不要使用靜態的構造器,代碼如下:

        復制代碼 代碼如下:

        static Products() { }//靜態構造器

        public Products() { }

        B、初化器-在沒有帶參數的構造器時,我們可以用初始化器對對象的共公屬性進行初始化

        如下:

        復制代碼 代碼如下:

        //產品的集合List

        ListListProduct = new List()

        {

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

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

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

        };

        C、終結器

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

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

        A、委托與事件

        委托

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

        1、委托的類型:是強類型,因為在聲明委托方法時,指定的參數,在調用這個委托時必須傳遞相同類型的參數與參數個數

        2、委托的內部機制:C#中所有的委托都繼承自System.Delegate,但是我們不能繼承它來實現自定義的委托,可以使用delegate關鍵字來定義

        3、委托的定義:使用delegate關鍵字來使用

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

        5、委托的使用:

        復制代碼 代碼如下:

        class DelegateClass

        {

        //一個泛型的委托,可以不同類型的參數進行處理

        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;

        //調用方法,所有在委托中的方法都能被執行

        Demo("str", "sterte");

        }

        事件

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

        步驟:

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

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

        3、調用定義的事件,觸發器,如:

        復制代碼 代碼如下:

        class Cat

        {

        //定義委托方法

        public delegate void ActionMethod();

        //聲明事件委托

        public event ActionMethod amd;

        //觸發事件

        public void CatShout()

        {

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

        amd();

        }

        }

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

        復制代碼 代碼如下:

        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、最后觸發事件

        B、反射與特性

        反射

        1、反射的作用:

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

        (2)、使用元數據,在運行時動態的調用元數據的成員與屬性等,而不是在編譯時進行綁定

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

        3、使用System.Type訪問元數據

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

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

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

        例:

        類一:

        復制代碼 代碼如下:

        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()來得到類型對象

        復制代碼 代碼如下:

        public void Exec()

        {

        CustomClass cc = new CustomClass();

        //得到當前類型的實例對象

        Type type = cc.GetType();

        //得到當前類型的實例對象使用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("------------------------------------------");

        //得到當前對象的公共方法,包含公共屬性的方法get,set

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

        {

        //方法名

        System.Console.WriteLine(method.Name);

        //成員的類型

        System.Console.WriteLine(method.MemberType);

        }

        }

        結果:

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

        復制代碼 代碼如下:

        //設置屬性的值

        property.SetValue(cc, 45, null);

        //得到屬性的值

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

        (3)、調用方法Invoke()函數

        復制代碼 代碼如下:

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

        demo.Invoke(cc, null);

        得到一個無參的方法Get_Name,若有參null應為參數的數組

        如: //調用有參的

        復制代碼 代碼如下:

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

        string[] param = { "12" };

        test.Invoke(cc, param);

        特性 (attribute)

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

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

        如下:

        復制代碼 代碼如下:

        class CustomAttribute : Attribute

        {

        public CustomAttribute();

        public CustomAttribute(AttributeTargets validOn);

        public bool AllowMultiple { get; set; }

        public bool Inherited { get; set; }

        public AttributeTargets ValidOn { get; }

        }

        使用:

        復制代碼 代碼如下:

        [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、擴展方法的使用與Lambda表達式

        擴展方法

        當你不能修改一個類的時候,擴展方法是一個方便給這個類添加其它方法的方式

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

        復制代碼 代碼如下:

        public static class PersonExtension

        {

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

        {

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

        }

        }

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

        PersonSingle類:

        復制代碼 代碼如下:

        public class PersonSingle

        {

        public void Show()

        {

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

        }

        }

        測試:

        復制代碼 代碼如下:

        private static void _Demo16()

        {

        PersonSingle ps = new PersonSingle();

        ps.Show();

        ps.Extension("whc");

        }

        2、擴展方法的訪問權限要與所擴展的類的方法一致,這里都是public

        3、擴展方法是寫在一個靜態類中的靜態方法

        Lambda表達式

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

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

        例:

        復制代碼 代碼如下:

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

        {

        System.Console.WriteLine();

        };

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

        例:

        復制代碼 代碼如下:

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

        3、Lambda表達式中能使用外部的變量

        總結

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

      【C#學習筆記及方法】相關文章:

      速錄學習技巧及方法08-13

      速錄學習及提速方法08-13

      速錄技巧及學習方法08-07

      速錄學習方法及技巧11-11

      CAD學習方法及技巧08-16

      學習數學的小技巧及方法07-30

      A-level數學及學習方法08-27

      速錄的學習方法及技巧08-10

      亞偉速錄學習方法及技巧11-13

      日語口語學習方法及技巧08-29

      主站蜘蛛池模板: 精品一区二区三区a蜜桃| 国产成人丝袜网站在线看| 碌曲县| 精品久久久久88久久久| 成人午夜视频在线观看高清| 婷婷色亚洲五月在线国产精品麻豆 | 灌云县| 资源县| 澄城县| 亚洲国产一区二区三区视频在线| 鹿泉市| 亚洲免费人成网站在线观看| 高陵县| 兴海县| 人妻少妇精品视频一区二区三区| 成人综合亚洲国产成人| 龙江县| 熟妇与小伙子露脸对白| 久久精品国产一区二区涩涩 | 亚洲av在线播放观看| 日本精品在线观看免费| 国产欧美日本亚洲精品一4区| 加勒比精品一区二区三区| 鸡泽县| 日本加勒比在线一区二区三区 | 三级全黄的视频在线观看| 仙女白丝jk小脚夹得我好爽| 亚洲欧美在线视频| 久久久精品2019免费观看 | 久久久亚洲精品一区二区| 日韩av在线不卡观看| a午夜国产一级黄片| 久久久久综合一本久道| 蜜桃在线播放免费一区二区三区| 农村国产毛片一区二区三区女| 日本女优在线观看一区二区三区| 日韩精品有码在线视频| 最新手机国产在线小视频| 午夜一区二区三区av| 欧美综合图区亚洲综合图区| 亚洲啊啊啊一区二区三区|