C#基礎系列第三篇

來源:互聯網
上載者:User

前言: 完全是我在學習過程中記錄的筆記,只不過分享一下讓很多剛開始學習.net編程的人能夠很快的學會C#語言

  1. 存取修飾詞(1)

(1)用在類型上面

     1)public  表示在任何地方都能夠被訪問

     2)internal 表示只能在當前項目中被訪問

 (2)用在成員上面(欄位方法等)

     1)public 可以在任何地方被訪問

     2)private

     3)protected

     4)internal 表示只能在當前程式集完全公開

     5)protected internal

 (3)圖示說明5個存取修飾詞的關係

  1. 存取層級約束

(1) 子類的存取層級不能比父類的高

            class MyBase

            {

            }

            public class MySub:MyBase

            {

            }

            //這樣寫是錯誤的

(2) 欄位和屬性的存取層級不能高於對應成員的存取層級

            class MyField

            {

            }

            public class MyClass

            {

                   MyField m;

                   public MyField M

                   {

                          get{return m;}

                          set{m=value;}

                   }

            }

            //這樣寫是錯誤的

(3) 方法的存取層級不能高於參數與傳回值的存取層級

        class MyInternal

           {

           }

           public class MyClass

           {

                  public MyInternal Func(MyInternal f)

                  {

                  }

           }

           //這樣寫是錯誤的

 (4)"可訪問性不一致"的錯誤

 (5)不允許訪問不可訪問的成員 //寫代碼遵循這句話

  1. 靜態方法

(1) 文法:

            public static 傳回型別 方法名(參數名)

            {

                   //過程

            }

(2) 靜態方法通過類名進行調用

             class MyStatic

            {

                   public static string GetString(string str)

                   {

                          return "$" + str + "$";

                   }

            }

            class Program

            {

                   static void Main(string[] args)

                   {

                          string Name = MyStatic.GetString("韓迎龍");

                          Console.WriteLine(Name);

                   }

            }

     (3)靜態方法,靜態欄位等都稱為靜態成員

            1)靜態成員屬於類

            2)執行個體成員屬於當前對象

                class WindowsPhone

                   {

                          public static int num;

                          public WindowsPhone()

                          {

                                 num++;

                          }

                          string sim;

                          public string Sim

                          {

                                 get { return sim; }

                                 set { sim = value; }

                          }

                   }

                   class Program

                   {

                          //靜態屬於所有該類的對象,是類的一個成員,而執行個體成員只屬於當前的執行個體

                          static void Main(string[] args)

                          {

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

                                 {

                                        new WindowsPhone();

                                 }

                                 WindowsPhone windows = new WindowsPhone();

                                 windows.Sim = "232434343";

                                 Console.WriteLine(windows.Sim);

                                 Console.WriteLine(WindowsPhone.num);

                          }

                   }

     (4)靜態成員和執行個體成員的使用

            1)靜態成員

                   ->在靜態方法中,可以訪問靜態成員

                   ->在靜態方法中,不可以直接存取執行個體成員

                   ->調用前初始化

            2)執行個體成員

                   ->在執行個體方法中,可以直接存取靜態成員

                   ->在執行個體方法中,可以直接存取執行個體成員

                   ->執行個體化對象時初始化

     (5)如果一個類裡面的成員全是靜態,那麼可以將這個類寫靜態

            static class MyClass

            {

                   //成員

            }

     (6)靜態類的成員必須都是靜態

            static class MyClass

            {

                   public static int GetNum()

                   {

                          return new Random().Next();

                   }

            }

            class Program

            {

                   static void Main(string[] args)

                   {

                          int num= MyClass.GetNum();

                          Console.WriteLine(num);

                   }

            }

  1. 靜態成員

(1) 給欄位的賦值都是由構造方法完成的,即使寫欄位的時候,對其進行初始化,也是有構造方法賦值的

     (2)如果調試的時候,回先執列欄位的初始化過程,在進入到建構函式的。

            class MyClass

            {

                   public static int numStatic = 20;

                   //在構造方法裡面賦值的

                   int num = 10;

                   public MyClass()

                   {

                         

                   }

            }

            class Program

            {

                   static void Main(string[] args)

                   {

                          new MyClass();

                   }

            }

            //斷點調試先執行int num = 10;,在執行構造方法

     (3)靜態欄位的賦值也是由靜態構造方法完成的

            1)文法:

                   static 類名()

                   {

                          //賦值過程

                   }

            2)靜態構造方法只能這樣寫

            3)靜態構造方法不允許手動調用,由系統自動調用

            4)當程式第一次訪問該類的時候(無論是靜態還是非靜態)

            5)靜態構造方法只被調用一次

                   class MyClass

                   {

                          public static int numS;

                          static MyClass()

                          {

                                 numS = 10;

                          }

                          int numI;

                          public MyClass()

                          {

                                 numI = 20;

                          }

                   }

                   class Program

                   {

                          static void Main(string[] args)

                          {

                                 //第一種情況 訪問執行個體成員

                                 new MyClass();

                                 new MyClass();

                                 //第二種  訪問靜態成員

                                 MyClass.numS = 40;

                          }

                   }

                   //在靜態構造方法前面加斷點執行

 (4)構造方法的預設值

            1)構造方法就是為欄位賦值用的,如果沒有顯示的提供賦值,那麼會有預設值

                   ->數實值型別  0

                   ->字元類型  /0

                   ->字串類型 null

                   ->bool類型 false

 (5)靜態成員只有在第一次訪問的時候進行初始化,但是會一直保留在記憶體中

            1)對於靜態欄位容易造成記憶體的溢出

                   class Program

                   {

                          static List<string> list = new List<string>();

                          static void Main(string[] args)

                          {

                                 while (true)

                                 {

                                        list.Add("123232435343");

                                 }

                          }

                   }

  1. 靜態類的繼承問題

(1) 靜態類不允許被繼承,靜態類只能繼承自object

     (2)繼承(多態)與靜態是兩個互斥的概念

     (3)靜態類不能實現任何介面

     (4)sealed關鍵字

            1)密封類(密閉類),表示不能別繼承

            2)string就是密封類

            3)可以使用重寫方法不再被重寫

     (5)靜態類的本質

            1)查看IL代碼 :abstract+sealed

            2)不允許執行個體化 abstract

            3)不允許被繼承 sealed

     (6)舉例說明:

            class MyClass1

            {

            }

            sealed class MyClass2

            {

            }

            class MySub : MyClass1

            {

            }

            class MySub2:MyClass2  //這樣寫是錯誤的

            {    

            } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.