国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第十單元 面向?qū)ο蠖红o態(tài)類與靜態(tài)成員

這篇具有很好參考價(jià)值的文章主要介紹了第十單元 面向?qū)ο蠖红o態(tài)類與靜態(tài)成員。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

我們天天都在使用

Console.WriteLine("Hello world");
?
Console.ReadLine("");
?
Arrays.Sort()

  

為什么Console 類 調(diào)用 方法不需要實(shí)例化而可以直接調(diào)用呢?

我們可以查看Console的源碼發(fā)現(xiàn)Console類定義如下:

public static class Console
{
    // ... 
}

  

我們發(fā)現(xiàn) Console 類 前面有個(gè) static 關(guān)鍵字修飾, 我們把 static 修飾的類 叫作 靜態(tài)類

1. 靜態(tài)類

static關(guān)鍵字的作用

  • static是靜態(tài)的意思,可以修飾成員變量和成員方法。

  • static修飾成員變量表示該成員變量只在內(nèi)存中只存儲(chǔ)一份,可以被共享訪問、修改。

public static class MyConsole 
{
    // 靜態(tài)構(gòu)造方法
    static MyConsole()
    {

    }
    // 靜態(tài)變量
    public static string Title { get; set; }

    public static string Description {  get; set; }
    // 靜態(tài)方法
    public static void WriteLine(params string[] s)
    {

    }
}

class Program
{
    static void Main(string[] args)
    {
        MyConsole.Title = "Hello,靜態(tài)類";
        MyConsole.WriteLine("靜態(tài)方法調(diào)用");
    }
}

?

靜態(tài)類基本上與非靜態(tài)類相同,但存在一個(gè)差異:靜態(tài)類無法實(shí)例化。 換句話說,無法使用 new 運(yùn)算符創(chuàng)建類類型的變量。 由于不存在任何實(shí)例變量,因此可以使用類名本身訪問靜態(tài)類的成員

與所有類類型的情況一樣,加載引用該類的程序時(shí),.NET 運(yùn)行時(shí)會(huì)加載靜態(tài)類的類型信息。 程序無法確切指定類加載的時(shí)間。 但是,可保證進(jìn)行加載,以及在程序中首次引用類之前初始化其字段并調(diào)用其靜態(tài)構(gòu)造函數(shù)。 靜態(tài)構(gòu)造函數(shù)只調(diào)用一次,在程序所駐留的應(yīng)用程序域的生存期內(nèi),靜態(tài)類會(huì)保留在內(nèi)存中。

?

以下列表提供靜態(tài)類的主要功能:

  • 只包含靜態(tài)成員。

  • 無法進(jìn)行實(shí)例化。

  • 會(huì)進(jìn)行密封。

  • 不能包含實(shí)例構(gòu)造函數(shù)

因此,創(chuàng)建靜態(tài)類基本上與創(chuàng)建只包含靜態(tài)成員和私有構(gòu)造函數(shù)的類相同。 私有構(gòu)造函數(shù)可防止類進(jìn)行實(shí)例化。 使用靜態(tài)類的優(yōu)點(diǎn)是編譯器可以進(jìn)行檢查,以確保不會(huì)意外地添加任何實(shí)例成員。 編譯器可保證無法創(chuàng)建此類的實(shí)例。

靜態(tài)類會(huì)進(jìn)行密封,因此不能繼承。 它們不能繼承自任何類(除了 Object)。 靜態(tài)類不能包含實(shí)例構(gòu)造函數(shù)。 但是,它們可以包含靜態(tài)構(gòu)造函數(shù)。 如果非靜態(tài)類包含了需要進(jìn)行有意義的初始化的靜態(tài)成員,則它也應(yīng)該定義一個(gè)靜態(tài)構(gòu)造器。

2. 非靜態(tài)類的靜態(tài)成員

非靜態(tài)類

不被static 關(guān)鍵字修飾的類稱為非靜態(tài)類.

?

非靜態(tài)類可以包含靜態(tài)方法、字段、屬性或事件。 即使未創(chuàng)建類的任何實(shí)例,也可對(duì)類調(diào)用靜態(tài)成員。 靜態(tài)成員始終按類名(而不是實(shí)例名稱)進(jìn)行訪問。 靜態(tài)成員只有一個(gè)副本存在(與創(chuàng)建的類的實(shí)例數(shù)無關(guān))。 靜態(tài)方法和屬性無法在其包含類型中訪問非靜態(tài)字段和事件,它們無法訪問任何對(duì)象的實(shí)例變量,除非在方法參數(shù)中顯式傳遞它。

更典型的做法是聲明具有一些靜態(tài)成員的非靜態(tài)類(而不是將整個(gè)類都聲明為靜態(tài))。 靜態(tài)字段的兩個(gè)常見用途是保留已實(shí)例化的對(duì)象數(shù)的計(jì)數(shù),或是存儲(chǔ)必須在所有實(shí)例間共享的值。

靜態(tài)方法可以進(jìn)行重載,但不能進(jìn)行替代,因?yàn)樗鼈儗儆陬?,而不屬于類的任何?shí)例。

雖然字段不能聲明為 static const,不過 static const 字段在其行為方面本質(zhì)上是靜態(tài)的。 它屬于類型,而不屬于類型的實(shí)例。 因此,可以使用用于靜態(tài)字段的相同 ClassName.MemberName 表示法來訪問 const 字段。 無需進(jìn)行對(duì)象實(shí)例化。

C# 不支持靜態(tài)局部變量(即在方法范圍中聲明的變量)。

可在成員的返回類型之前使用 static 關(guān)鍵字聲明靜態(tài)類成員,如下面的示例所示:

public class Cat // 非靜態(tài)類
{
    public string Name { get; set; } // 實(shí)例變量,屬于對(duì)象
    public static int Leg { get; set; } // 靜態(tài)成員變量,, 屬于類

    // 重載靜態(tài)方法run, 屬于類
    public static void Run()
    {
        // Console.WriteLine(this.Name);// 報(bào)錯(cuò),靜態(tài)方法中,不能訪問實(shí)例成員
        Console.WriteLine($"{Leg} 條腿的貓?jiān)谂懿?/span>");// 正確,靜態(tài)類中可以訪問靜態(tài)成員變量
    }
    // 重載靜態(tài)方法run, 屬于類
    public static void Run(int speed)
    {
        Console.WriteLine($"{Leg} 條腿的貓?jiān)谂懿?,速度是:{speed}");
    }
    
    // 實(shí)例方法,屬于對(duì)象
    public void Eat()
    {
        // 實(shí)例方法既可以訪問成員變量,也可以訪問靜態(tài)變量
        Console.WriteLine($"{Leg} 條腿的 {this.Name} 在搶狗糧吃。") ; 
    }
}

?

在首次訪問靜態(tài)成員之前以及在調(diào)用構(gòu)造函數(shù)(如果有)之前,會(huì)初始化靜態(tài)成員。 若要訪問靜態(tài)類成員,請(qǐng)使用類的名稱(而不是變量名稱)指定成員的位置,如下面的示例所示:

static void Main(string[] args)
{
    Cat.Leg = 4;
    Cat.Run(30);
    
    Cat c = new Cat();
    c.Eat();
}

?

3. 靜態(tài)構(gòu)造方法

靜態(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 variable that must be initialized at run time.
    static readonly long baseline;

    // Static constructor is called at most one time, before any
    // instance constructor is invoked or member is accessed.
    static SimpleClass()
    {
        baseline = DateTime.Now.Ticks;
    }
}

?

靜態(tài)構(gòu)造函數(shù)具有以下屬性:

  • 靜態(tài)構(gòu)造函數(shù)不使用訪問修飾符或不具有參數(shù)。

  • 類或結(jié)構(gòu)只能有一個(gè)靜態(tài)構(gòu)造函數(shù)。

  • 靜態(tài)構(gòu)造函數(shù)不能繼承或重載。

  • 靜態(tài)構(gòu)造函數(shù)不能直接調(diào)用,并且僅應(yīng)由公共語言運(yùn)行時(shí) (CLR) 調(diào)用。 可以自動(dòng)調(diào)用它們。

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

  • 自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)。 它在創(chuàng)建第一個(gè)實(shí)例或引用該類(不是其基類)中聲明的任何靜態(tài)成員之前初始化。 靜態(tài)構(gòu)造函數(shù)在實(shí)例構(gòu)造函數(shù)之前運(yùn)行。 調(diào)用(而不是分配)分配給事件或委托的靜態(tài)方法時(shí),將調(diào)用類型的靜態(tài)構(gòu)造函數(shù)。 如果靜態(tài)構(gòu)造函數(shù)類中存在靜態(tài)字段變量初始值設(shè)定項(xiàng),它們將以在類聲明中顯示的文本順序執(zhí)行。 初始值設(shè)定項(xiàng)緊接著執(zhí)行靜態(tài)構(gòu)造函數(shù)之前運(yùn)行。

  • 如果未提供靜態(tài)構(gòu)造函數(shù)來初始化靜態(tài)字段,會(huì)將所有靜態(tài)字段初始化為其默認(rèn)值,如 C# 類型的默認(rèn)值中所列。

  • 如果靜態(tài)構(gòu)造函數(shù)引發(fā)異常,運(yùn)行時(shí)將不會(huì)再次調(diào)用該函數(shù),并且類型在應(yīng)用程序域的生存期內(nèi)將保持未初始化。 大多數(shù)情況下,當(dāng)靜態(tài)構(gòu)造函數(shù)無法實(shí)例化一個(gè)類型時(shí),或者當(dāng)靜態(tài)構(gòu)造函數(shù)中發(fā)生未經(jīng)處理的異常時(shí),將引發(fā) TypeInitializationException 異常。 對(duì)于未在源代碼中顯式定義的靜態(tài)構(gòu)造函數(shù),故障排除可能需要檢查中間語言 (IL) 代碼。

  • 靜態(tài)構(gòu)造函數(shù)的存在將防止添加 BeforeFieldInit 類型屬性。 這將限制運(yùn)行時(shí)優(yōu)化。

  • 聲明為 static readonly 的字段可能僅被分配為其聲明的一部分或在靜態(tài)構(gòu)造函數(shù)中。 如果不需要顯式靜態(tài)構(gòu)造函數(shù),請(qǐng)?jiān)诼暶鲿r(shí)初始化靜態(tài)字段,而不是通過靜態(tài)構(gòu)造函數(shù),以實(shí)現(xiàn)更好的運(yùn)行時(shí)優(yōu)化。

  • 運(yùn)行時(shí)在單個(gè)應(yīng)用程序域中多次調(diào)用靜態(tài)構(gòu)造函數(shù)。 該調(diào)用是基于特定類型的類在鎖定區(qū)域中進(jìn)行的。 靜態(tài)構(gòu)造函數(shù)的主體中不需要其他鎖定機(jī)制。 若要避免死鎖的風(fēng)險(xiǎn),請(qǐng)勿阻止靜態(tài)構(gòu)造函數(shù)和初始值設(shè)定項(xiàng)中的當(dāng)前線程。 例如,不要等待任務(wù)、線程、等待句柄或事件,不要獲取鎖定,也不要執(zhí)行阻止并行操作,如并行循環(huán)、Parallel.Invoke 和并行 LINQ 查詢。

單例模式實(shí)現(xiàn)

class MyDbContext
{
    private static MyDbContext _instance;
    // 禁止外部實(shí)例化
    private MyDbContext()
    {

    }

    public static string DbName;
    public static string UserName;
    public static string Password;
    
    // 靜態(tài)構(gòu)造方法
    static MyDbContext()
    {
        DbName = "SqlServer";
        UserName = "sa";
        Password = "123456";
        // 實(shí)例化一次
        _instance = new MyDbContext();
    }
    // 對(duì)外提供訪問的路徑
    public MyDbContext Instance
    {
        get { return _instance; }
    }

    public void Connection()
    {

    }

    public void Abort()
    {

    }
}

?

4. 作業(yè)

  1. 定義一個(gè)靜態(tài)類 MyMath

  2. MyMath類中 實(shí)現(xiàn)兩個(gè)參數(shù)的方法:加,減,乘,除,平均數(shù)

  3. 重載 :加,減,乘,除,平均數(shù)

  4. 定義一個(gè)非靜態(tài)類 CommonUtils, 任意聲明兩個(gè)實(shí)例成員變量與靜態(tài)成員變量

  5. CommonUtils類中,聲明一個(gè)實(shí)例方法,并輸出 上述的實(shí)例成員變量與靜態(tài)成員變量。

  6. CommonUtils 類中, 聲明一個(gè)靜態(tài)方法,并輸出靜態(tài)成員變量。

? 

視頻教程:

C#入門到精通 - 網(wǎng)易云課堂 (163.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-464463.html

到了這里,關(guān)于第十單元 面向?qū)ο蠖红o態(tài)類與靜態(tài)成員的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++系列P5】‘類與對(duì)象‘-三部曲——[對(duì)象&特殊成員](3/3)

    【C++系列P5】‘類與對(duì)象‘-三部曲——[對(duì)象&特殊成員](3/3)

    ?前言 大家好吖,歡迎來到 YY 滴 C++系列 ,熱烈歡迎! 【 \\\'類與對(duì)象\\\'-三部曲】的大綱主要內(nèi)容如下 : 如標(biāo)題所示,本章是【 \\\'類與對(duì)象\\\'-三部曲】三章中的第三章節(jié)——對(duì)象成員章節(jié),主要內(nèi)容如下: 目錄 一.const成員/成員函數(shù) 一.用const修飾this指針的好處——含權(quán)限知識(shí)點(diǎn)

    2024年02月06日
    瀏覽(22)
  • 【C++】類與對(duì)象(2補(bǔ)充運(yùn)算符重載,const成員)

    作者:愛寫代碼的剛子 時(shí)間:2023.5.11 本篇作為【C++】類與對(duì)象(2)的補(bǔ)充(運(yùn)算符重載、const成員) 賦值運(yùn)算符重載 運(yùn)算符重載 C++為了增強(qiáng)代碼的可讀性引入了運(yùn)算符重載,運(yùn)算符重載是具有特殊函數(shù)名的函數(shù),也具有其返回值類 型,函數(shù)名字以及參數(shù)列表,其返回值類

    2024年02月04日
    瀏覽(58)
  • [C++] 類與對(duì)象(中)類中六個(gè)默認(rèn)成員函數(shù)(1)

    [C++] 類與對(duì)象(中)類中六個(gè)默認(rèn)成員函數(shù)(1)

    ? 目錄 1、類的六個(gè)默認(rèn)成員函數(shù) 2、構(gòu)造函數(shù) 2.1 構(gòu)造函數(shù)的概念 2.2 特性 2.2.1 構(gòu)造函數(shù)的重載: 2.2.2 全缺省的構(gòu)造函數(shù): 3、析構(gòu)函數(shù) 3.1 析構(gòu)函數(shù)的概念 3.2 特性 4、拷貝構(gòu)造函數(shù) 4.1 拷貝構(gòu)造函數(shù)的概念 4.2 特征 如果一個(gè)類中什么成員都沒有,簡稱為空類??疹愔姓娴氖?/p>

    2024年02月12日
    瀏覽(21)
  • Java面向?qū)ο?1——類與對(duì)象

    Java面向?qū)ο?1——類與對(duì)象

    大家好,我是白夜,今天和大家聊聊類與對(duì)象 面向過程編程 C 語言就是面向過程編程的,關(guān)注的是過程,分析出求解問題的步驟,通過函數(shù)調(diào)用逐步解決問題。 面向?qū)ο缶幊?JAVA 是基于面向?qū)ο蟮?,關(guān)注的是對(duì)象,將一件事情拆分成不同的對(duì)象,靠對(duì)象之間的交互完成。 舉

    2024年04月08日
    瀏覽(22)
  • C++初階--類與對(duì)象--const成員和日期類的實(shí)現(xiàn)

    C++初階--類與對(duì)象--const成員和日期類的實(shí)現(xiàn)

    將const修飾的成員函數(shù)稱之為const成員函數(shù)。 在一個(gè)成員函數(shù)里面,對(duì)于this指針指向的對(duì)象,是隱藏式的,沒有辦法用常規(guī)的方法去修飾它,所以我們是這樣進(jìn)行修飾的: 注意事項(xiàng): date.h date.cpp 這里采用多文件編程的方式,所以在date.cpp中,是在Date類外使用的,需要加上作

    2024年02月05日
    瀏覽(31)
  • TypeScript類與對(duì)象:面向?qū)ο缶幊痰幕A(chǔ)

    TypeScript 是 JavaScript 的一個(gè)超集,它為 JavaScript 添加了靜態(tài)類型、類、接口和裝飾器等面向?qū)ο缶幊痰奶匦?,并通過編譯器將 TypeScript 編譯成JavaScript,可以在任何 JavaScript 環(huán)境中運(yùn)行,因此成為了 JavaScript 開發(fā)中不可或缺的工具。面向?qū)ο缶幊淌乾F(xiàn)代編程語言的基礎(chǔ),而 Ty

    2024年02月09日
    瀏覽(19)
  • C++ 之 【類與對(duì)象】從入門到精通一條龍服務(wù) 最終篇(static成員、友元、匿名對(duì)象。。。)

    C++ 之 【類與對(duì)象】從入門到精通一條龍服務(wù) 最終篇(static成員、友元、匿名對(duì)象。。。)

    ??到用時(shí)方恨早,白首方悔掙的少 車到山前沒有路,懸崖勒馬勒不住 –?–?–?–?–?–?–?–?–?–?–?–?–?–?–?-正文開始-?–?–?–?–?–?–?–?–?–?–?–?–?–?–?– 在創(chuàng)建對(duì)象時(shí),編譯器通過調(diào)用構(gòu)造函數(shù),給對(duì)象中各個(gè)

    2024年04月16日
    瀏覽(24)
  • Python 面向?qū)ο螅ㄒ唬ǔ蓡T方法、類和對(duì)象)

    Python 面向?qū)ο螅ㄒ唬ǔ蓡T方法、類和對(duì)象)

    學(xué)校開學(xué),要求學(xué)生填寫自己的基礎(chǔ)信息,一人發(fā)一張白紙,讓學(xué)生自己填 改為登記表,打印出來讓學(xué)生自行填寫: 在程序中簡單使用變量來記錄學(xué)生信息 ?使用變量記錄數(shù)據(jù)太亂了。 如果程序中也和生活中一樣 可以設(shè)計(jì)表格 可以將設(shè)計(jì)的表格打印出來 可以將打印好的表

    2024年02月15日
    瀏覽(29)
  • 【是C++,不是C艸】 類與對(duì)象 | 默認(rèn)成員函數(shù) | 構(gòu)造函數(shù) | 析構(gòu)函數(shù)

    【是C++,不是C艸】 類與對(duì)象 | 默認(rèn)成員函數(shù) | 構(gòu)造函數(shù) | 析構(gòu)函數(shù)

    ???? 歡迎來到 Claffic 的博客 ???? ???? 專欄: 《是C++,不是C艸》?? 前言: 在完成類與對(duì)象的認(rèn)識(shí)后,我們接著學(xué)習(xí)類與對(duì)象的第二部分:默認(rèn)成員函數(shù),它包括構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造,賦值重載,普通對(duì)象取地址和const對(duì)象取地址重載,放心,這一期不會(huì)都

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包