欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#構造函數詳解

 更新時間:2022年04月18日 13:35:28   作者:農碼一生  
本文詳細講解了C#中的構造函數,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、簡介

構造函數,基本用法是在類對象聲明的時候完成初始化工作。

二、實例構造函數

1、構造函數的名字與類名相同。

2、使用 new 表達式創(chuàng)建類的對象或者結構(例如int)時,會調用其構造函數。并且通常初始化新對象的數據成員。

3、除非類是靜態(tài)的,否則會為沒有構造函數的類,自動生成一個默認構造函數,并使用默認值來初始化對象字段。

4、構造函數可以有參數,可以以多態(tài)的形式存在多個構造函數。

代碼:

class CoOrds
    {
        public int x, y;
        // 實例構造函數(默認構造函數)
        public CoOrds()
        {
            x = 0;
            y = 0;
        }
        // 具有兩個參數的構造函數
        public CoOrds(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        // 重寫toString方法
        public override string ToString()
        {
            return (String.Format("({0},{1})", x, y));
        }
        static void Main(string[] args)
        {
            CoOrds p1 = new CoOrds();//調用默認的無參構造函數
            CoOrds p2 = new CoOrds(5, 3);//調用兩個參數構造函數

            // 使用重寫ToString方法顯示結果
            Console.WriteLine("CoOrds #1 at {0}", p1);
            Console.WriteLine("CoOrds #2 at {0}", p2);
            Console.ReadKey();
        }
    }

    /* Output:
     CoOrds #1 at (0,0)
     CoOrds #2 at (5,3)        
    */

分析:

1.其中CoOrds()是構造函數,諸如此類不帶參數的構造函數稱為“默認構造函數”。

2.CoOrds(int x, int y)同樣也是構造函數,構造函數可以有參數,允許多態(tài)。

三、靜態(tài)構造函數

1.靜態(tài)構造函數不使用訪問修飾符或不具有參數。
2.在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,將自動調用靜態(tài)構造函數以初始化類。
3.不能直接調用靜態(tài)構造函數。
4.用戶無法控制在程序中執(zhí)行靜態(tài)構造函數的時間。
5.靜態(tài)構造函數的一種典型用法是在類使用日志文件且將構造函數用于將條目寫入到此文件中時使用。
6.靜態(tài)構造函數對于創(chuàng)建非托管代碼的包裝類也非常有用,這種情況下構造函數可調用 LoadLibrary 方法。
7.如果靜態(tài)構造函數引發(fā)異常,運行時將不會再次調用該函數,并且類型在程序運行所在的應用程序域的生存期內將保持未初始化。

代碼1:

class TestClass
    {
        public static int x = 0;
        //構造函數
        TestClass()
        {
            x = 1;
        }
        //靜態(tài)構造函數
        static TestClass()
        {    //第二步,執(zhí)行x = 2
            x = 2;
        }    
        //第一步,程序入口Main最先執(zhí)行。然后執(zhí)行public static int x = 0 接著執(zhí)行靜態(tài)構造函數。
        public static void Main(string[] args)
        {
            Console.WriteLine("x:{0}", x); //打印,x = 2
            TestClass Test = new TestClass();//第三步執(zhí)行構造函數,此時x = 1
            Console.WriteLine("x:{0}", x); //打印 x = 1
            Console.Read();
        }
    }

分析1:

1.Main是程序入口,當執(zhí)行Main的時候,最先執(zhí)行public static int x = 0
2.接著執(zhí)行靜態(tài)構造函數,此時 x = 2
3.然后執(zhí)行Main函數里面的內容,打印 x,此時 x = 2
4.初始化TestClass,然后會執(zhí)行構造函數,此時 x = 1
5.打印 x = 1

代碼2:

public class A
    {
        public static readonly int x;
        static A()
        {
            //第二步,調用B.y,此處B.y = 0,因為int類型在初始化階段,會給賦默認值,默認值為0。最后x = 0 + 1(返回給第一步)
            x = B.y + 1;
        }
    }
    public class B
    {
        //第一步,調用A.x,然后執(zhí)行類A的靜態(tài)構造函數,等待返回(第二步返回的A.x = 1,所以y = 1 + 1)
        public static int y = A.x + 1;
        public static void Main(string[] args)
        {
            //第三步,A.x = 1,y = 2。
            Console.WriteLine("x:{0},y:{1}。", A.x, y);
            Console.ReadLine();
        }
    }

分析2:

1.首先,每一個項目有且只能有一個靜態(tài)類的Main函數作為入口函數。而入口函數是最先執(zhí)行的。
2.由于Main函數在B類里面,首先會初始化B類。而類的初始化順序是:類里的靜態(tài)變量,然后執(zhí)行靜態(tài)構造函數。
3.運行起先執(zhí)行 public static int y = A.x + 1 這個,執(zhí)行的時候,會先把 y 初始化為0,然后計算 y 的值。
4.計算 y 的值的時候,調用了 A 的靜態(tài)變量 x 。所以會先初始化A。
5.初始化A時首先去執(zhí)行 public static readonly int x ,先把 x 初始化為0。
6.然后執(zhí)行A的靜態(tài)構造函數 x = B.y + 1 此時 y 已經初始化為0了。
7.計算得到 x = 1。然后回到 public static int y = A.x + 1 得到 y = 2。
8.然后再執(zhí)行Main函數的內容。得出結果x=1,y=2

四、私有構造函數

私有構造函數是一種特殊的實例構造函數。 它通常用于只包含靜態(tài)成員的類中。 如果類具有一個或多個私有構造函數而沒有公共構造函數,則其他類(除嵌套類外)無法創(chuàng)建該類的實例。

代碼:

public class PrivateConstructor
    {
        private PrivateConstructor()
        {
            //PrivateTest a = new PrivateTest();
            //注釋打開會報錯,錯誤信息:不可訪問,因為它受保護級別限制。因為私有構造函數無法在類的外面實例化。
        }
        public class PrivateTest
        {
            int i;
            private PrivateTest()
            {
                i = 3;
            }
            static void Main(string[] args)
            {
                PrivateConstructor t = new PrivateConstructor(); //嵌套類允許實例化。
                PrivateTest p = new PrivateTest(); //類的內部允許實例化。
                Console.WriteLine("i:{0}", p.i); //結果:i:3
                Console.Read();
            }
        }
    }

分析:

聲明空構造函數可阻止自動生成默認構造函數。 請注意,如果不對構造函數使用訪問修飾符,則在默認情況下它仍為私有構造函數。 但是,通常會顯式地使用 private 修飾符來清楚地表明該類不能被實例化。

到此這篇關于C#構造函數的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#調用Matlab生成的dll方法的詳細說明

    C#調用Matlab生成的dll方法的詳細說明

    這篇文章詳細介紹了C#調用Matlab生成的dll方法,有需要的朋友可以參考一下
    2013-09-09
  • 原生實現C#與Lua相互調用方法(Unity3D可用)

    原生實現C#與Lua相互調用方法(Unity3D可用)

    Lua是一種很好的擴展性語言,Lua解釋器被設計成一個很容易嵌入到宿主程序的庫,下面這篇文章主要給大家介紹了關于原生實現C#與Lua相互調用方法,Unity3D可用的相關資料,需要的朋友可以參考下
    2022-04-04
  • C#中Linq的去重方式Distinct詳解

    C#中Linq的去重方式Distinct詳解

    本文詳細講解了C#中Linq的去重方式Distinct,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C#固定大小緩沖區(qū)及使用指針復制數據詳解

    C#固定大小緩沖區(qū)及使用指針復制數據詳解

    這篇文章主要為大家介紹了C#固定大小緩沖區(qū)及使用指針復制數據詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C#實現字符串與圖片的Base64編碼轉換操作示例

    C#實現字符串與圖片的Base64編碼轉換操作示例

    這篇文章主要介紹了C#實現字符串與圖片的Base64編碼轉換操作,結合實例形式分析了C#針對base64編碼與圖片的相互轉換操作技巧,需要的朋友可以參考下
    2017-06-06
  • C#面向對象編程中開閉原則的示例詳解

    C#面向對象編程中開閉原則的示例詳解

    在面向對象編程中,SOLID?是五個設計原則的首字母縮寫,旨在使軟件設計更易于理解、靈活和可維護。本文將通過實例詳細講講C#面向對象編程中開閉原則,需要的可以參考一下
    2022-07-07
  • c#之滾動字幕動畫窗體的實現詳解

    c#之滾動字幕動畫窗體的實現詳解

    本篇文章是對c#中滾動字幕動畫窗體的實現方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C#算法之羅馬數字轉整數

    C#算法之羅馬數字轉整數

    本文詳細講解了C#算法之羅馬數字轉整數,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • C# 三種序列化方法分享

    C# 三種序列化方法分享

    這篇文章主要介紹了C# 三種序列化方法,需要的朋友可以參考下
    2014-02-02
  • Unity3D Shader實現流光效果

    Unity3D Shader實現流光效果

    這篇文章主要為大家詳細介紹了Unity3D Shader實現流光效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論