国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#基礎(chǔ)知識(shí)系列五(構(gòu)造函數(shù))

2019-11-17 03:24:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

C#基礎(chǔ)知識(shí)系列五(構(gòu)造函數(shù))

前言

  本節(jié)主要來(lái)學(xué)習(xí)下實(shí)例構(gòu)造函數(shù)、私有構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)。

  構(gòu)造函數(shù)的作用:

  1、當(dāng)一個(gè)類(lèi)在new實(shí)例化對(duì)象時(shí),可調(diào)用構(gòu)造函數(shù)進(jìn)行初始化對(duì)象。

  2、不帶參數(shù)的構(gòu)造函數(shù)稱(chēng)為“默認(rèn)構(gòu)造函數(shù)”。無(wú)論何時(shí),只要使用new運(yùn)算符實(shí)例化對(duì)象,并且不為new提供任何參數(shù),就會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù)。除非類(lèi)是static的,否則 C# 編譯  器將為無(wú)構(gòu)造函數(shù)的類(lèi)提供一個(gè)公共的默認(rèn)構(gòu)造函數(shù),以便該類(lèi)可以實(shí)例化。

  3、通過(guò)將構(gòu)造函數(shù)設(shè)置為私有構(gòu)造函數(shù)可以阻止類(lèi)被實(shí)例化。

  4、結(jié)構(gòu)類(lèi)型的構(gòu)造函數(shù)與類(lèi)的構(gòu)造函數(shù)類(lèi)似,但是 structs 不能包含顯式默認(rèn)構(gòu)造函數(shù),因?yàn)榫幾g器將自動(dòng)提供一個(gè)構(gòu)造函數(shù)。此構(gòu)造函數(shù)會(huì)將struct中的每個(gè)字段初始化為默認(rèn)值。   只有當(dāng) struct 用 new 實(shí)例化時(shí),才會(huì)調(diào)用此默認(rèn)構(gòu)造函數(shù)。

實(shí)例構(gòu)造函數(shù)

使用 new 表達(dá)式創(chuàng)建某個(gè)類(lèi)的對(duì)象時(shí),會(huì)使用實(shí)例構(gòu)造函數(shù)創(chuàng)建和初始化所有實(shí)例成員變量。 要初始化靜態(tài)類(lèi)或非靜態(tài)類(lèi)中的靜態(tài)變量,必須定義靜態(tài)構(gòu)造函數(shù)。

class CoOrds{    public int x, y;    // constructor    public CoOrds()    {        x = 0;        y = 0;    }}

只要?jiǎng)?chuàng)建基于CoOrds類(lèi)的對(duì)象,就會(huì)調(diào)用此實(shí)例構(gòu)造函數(shù)。諸如此類(lèi)不帶參數(shù)的構(gòu)造函數(shù)稱(chēng)為“默認(rèn)構(gòu)造函數(shù)”。然而,提供其他構(gòu)造函數(shù)通常十分有用。例如,可以向CoOrds類(lèi)添加構(gòu)造函數(shù),以便可以為數(shù)據(jù)成員指定初始值:

public CoOrds(int x, int y){    this.x = x;    this.y = y;}

這樣便可以用默認(rèn)或特定的初始值創(chuàng)建CoOrd對(duì)象,如下所示:

CoOrds p1 = new CoOrds();CoOrds p2 = new CoOrds(5, 3);

如果某個(gè)類(lèi)沒(méi)有構(gòu)造函數(shù),則會(huì)自動(dòng)生成一個(gè)默認(rèn)構(gòu)造函數(shù),并使用默認(rèn)值來(lái)初始化對(duì)象字段。

也可以用實(shí)例構(gòu)造函數(shù)來(lái)調(diào)用基類(lèi)的實(shí)例構(gòu)造函數(shù)。類(lèi)構(gòu)造函數(shù)可通過(guò)初始值設(shè)定項(xiàng)來(lái)調(diào)用基類(lèi)的構(gòu)造函數(shù),如下所示:

abstract class Shape{    public const double pi = Math.PI;    PRotected double x, y;    public Shape(double x, double y)    {        this.x = x;        this.y = y;    }    public abstract double Area();}class Circle : Shape{    public Circle(double radius)        : base(radius, 0)    {    }    public override double Area()    {        return pi * x * x;    }}

在此示例中,Circle類(lèi)將表示半徑和高度的值傳遞給Shape(Circle從它派生而來(lái))提供的構(gòu)造函數(shù)。

私有構(gòu)造函數(shù)

私有構(gòu)造函數(shù)是一種特殊的實(shí)例構(gòu)造函數(shù)。它通常用在只包含靜態(tài)成員的類(lèi)中。如果類(lèi)具有一個(gè)或多個(gè)私有構(gòu)造函數(shù)而沒(méi)有公共構(gòu)造函數(shù),則其他類(lèi)(除嵌套類(lèi)外)無(wú)法創(chuàng)建該類(lèi)的實(shí)例。例如:

class NLog{    // Private Constructor:    private NLog() { }    public static double e = Math.E;  //2.71828...}

聲明空構(gòu)造函數(shù)可阻止自動(dòng)生成默認(rèn)構(gòu)造函數(shù)。 注意,如果您不對(duì)構(gòu)造函數(shù)使用訪問(wèn)修飾符,則在默認(rèn)情況下它仍為私有構(gòu)造函數(shù)。 但是,通常顯式地使用 private 修飾符來(lái)清楚地表明該類(lèi)不能被實(shí)例化。

當(dāng)沒(méi)有實(shí)例字段或?qū)嵗椒ǎㄈ?Math 類(lèi))時(shí)或者當(dāng)調(diào)用方法以獲得類(lèi)的實(shí)例時(shí),私有構(gòu)造函數(shù)可用于阻止創(chuàng)建類(lèi)的實(shí)例。 如果類(lèi)中的所有方法都是靜態(tài)的,可考慮使整個(gè)類(lèi)成為靜態(tài)的。

下面是使用私有構(gòu)造函數(shù)的類(lèi)的示例:

    public class Counter    {        private Counter() { }        public static int currentCount;        public static int IncrementCount()        {            return ++currentCount;        }    }    class TestCounter    {        static void Main()        {            // Counter aCounter = new Counter();   // Error            Counter.currentCount = 100;            Counter.IncrementCount();            Console.WriteLine("New count: {0}", Counter.currentCount);            Console.WriteLine("Press any key to exit.");            Console.ReadKey();        }    }

注意,如果您取消注釋該示例中的以下語(yǔ)句,它將生成一個(gè)錯(cuò)誤,因?yàn)樵摌?gòu)造函數(shù)受其保護(hù)級(jí)別的限制而不可訪問(wèn):

// Counter aCounter = new Counter();   // Error

靜態(tài)構(gòu)造函數(shù)

靜態(tài)構(gòu)造函數(shù)用于初始化任何 靜態(tài) 數(shù)據(jù),或用于執(zhí)行僅需執(zhí)行一次的特定操作。 在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)。

    class SimpleClass    {        static readonly long baseline;        static SimpleClass()        {            baseline = DateTime.Now.Ticks;        }    }

靜態(tài)構(gòu)造函數(shù)具有以下特點(diǎn):

  • 靜態(tài)構(gòu)造函數(shù)既沒(méi)有訪問(wèn)修飾符,也沒(méi)有參數(shù)。

  • 在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)來(lái)初始化類(lèi)。

  • 無(wú)法直接調(diào)用靜態(tài)構(gòu)造函數(shù)。

  • 在程序中,用戶(hù)無(wú)法控制何時(shí)執(zhí)行靜態(tài)構(gòu)造函數(shù)。

  • 靜態(tài)構(gòu)造函數(shù)的典型用途是:當(dāng)類(lèi)使用日志文件時(shí),將使用這種構(gòu)造函數(shù)向日志文件中寫(xiě)入項(xiàng)。

  • 靜態(tài)構(gòu)造函數(shù)在為非托管代碼創(chuàng)建包裝類(lèi)時(shí)也很有用,此時(shí)該構(gòu)造函數(shù)可以調(diào)用LoadLibrary方法。

  • 如果靜態(tài)構(gòu)造函數(shù)引發(fā)異常,運(yùn)行時(shí)將不會(huì)再次調(diào)用該構(gòu)造函數(shù),并且在程序運(yùn)行所在的應(yīng)用程序域的生存期內(nèi),類(lèi)型將保持未初始化。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南平市| 泰和县| 长宁县| 平罗县| 长宁区| 余江县| 皮山县| 无棣县| 岚皋县| 武强县| 鄂州市| 马边| 东乡县| 咸阳市| 保定市| 黄浦区| 红原县| 彭山县| 广汉市| 灌南县| 湛江市| 乌拉特后旗| 酒泉市| 奉贤区| 昌图县| 右玉县| 长沙县| 沙雅县| 蒲城县| 丹棱县| 江永县| 沾化县| 惠东县| 县级市| 基隆市| 新津县| 四子王旗| 阳高县| 揭东县| 印江| 鄂托克前旗|