欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【C#基礎學習】第十一章、類-創(chuàng)新互聯(lián)

目錄

10余年的盧氏網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整盧氏建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“盧氏網(wǎng)站設計”,“盧氏網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

1.類的概述

1.1 類的定義

1.2 程序和類

2.聲明類(類定義)

2.1 分部類和分布類型?

3.類成員

3.1 字段

3.1.1 字段的語法

3.1.2 顯示字段和隱式字段的初始化

3.1.3 字段的修飾符:readonly關鍵字&const關鍵字

3.1.4 靜態(tài)字段

3.2 常量

3.2.1 使用readonly關鍵字&const關鍵字來修飾字段的區(qū)別

3.3 屬性

3.3.1 屬性的組成

3.3.2 靜態(tài)屬性

3.4 構造函數(shù)

3.4.1 實例構造函數(shù)

3.4.2 靜態(tài)構造函數(shù)

3.5 析構函數(shù)

3.6 索引器

3.6.1 this關鍵字

3.6.2 索引器的語法

4.類的實例

4.1實例化

4.1.1 實例對象

4.1.2 對象初始化語句


? C#是一種面向?qū)ο蟮恼Z言,這點與C語言不同,C語言是一種面向過程的語言。除此之外,面向?qū)ο蟮恼Z言還有C++、Java等。而面向?qū)ο笳Z言的一個基本特征是它們都有類,類是C#中比較復雜的數(shù)據(jù)類型。

?本章將先講明 什么是類,并說明類由什么組成,組成類的函數(shù)成員和數(shù)據(jù)成員怎么用,接著講如何實例一個類。


1.類的概述

?就像第五章數(shù)據(jù)類型里對類型的解釋一樣。

帶到現(xiàn)實中來看,大象這個物種就是一個類。大象這個物種的共同的特性(比如 年齡、分布區(qū)域、歸屬群落、性別,體型等)和行為(吃草、繁衍、行走、潛水等)就是類的公共屬性和行為。類的實例就是大象這個物種中的一頭大象。

1.1 類的定義

? 類是一個能存儲數(shù)據(jù)并執(zhí)行代碼的數(shù)據(jù)結構。

類包含數(shù)據(jù)成員和函數(shù)成員。(一個C#類可以有任意數(shù)目的數(shù)據(jù)成員和函數(shù)成員)

  • 數(shù)據(jù)成員:存儲 與類或類的實例 相關的數(shù)據(jù)。數(shù)據(jù)成員通常模擬和該類所表示的現(xiàn)實世界事務的特性。
  • 函數(shù)成員:它執(zhí)行代碼。通常會模擬類所表示的現(xiàn)實世界的功能和操作

1.2 程序和類

一個運行中的C#程序是一組相互作用的類型對象,它們中大部分都是類的實例。


2.聲明類(類定義)

類的聲明定義類的特征和成員。

聲明一個類并不創(chuàng)建類的實例,而是用于創(chuàng)建實例的模板。

聲明類的語法:

class 大象(類的名稱)? ? ?//聲明類

{

? string sex;????????????????//數(shù)據(jù)成員聲明(類的成員)

? ...

? void swim(){...}? ? ? //函數(shù)成員聲明(類的成員)

? ...

}?

聲明類必須包含:

  • 類的名稱
  • 類的成員
  • 類的特征(封裝、繼承、多態(tài),第十四章會講)

2.1 分部類和分布類型?

類聲明可以分割為幾個分布類的聲明

  • 每個分布類的聲明都含有一些類成員的聲明。
  • 類的分布類聲明可以在同一個文件中、也可以在不同文件中。

分布類的使用要求:?

  • 類聲明必須加類型修飾符 partical
  • 類名稱相同
  • 組成類的所有分布類聲明必須在一起編譯

//示例:
partical class A //類名稱相同
{
    int a;
}

partical class A 
{
    int b;
}

3.類成員

(注意:本章主講實例成員,靜態(tài)成員放在十三章講)

在類聲明中定義的類成員有9種成員類型。

其中字段和方法是最重要的類成員類型。(本章不會介紹事件)

3.1 類成員的類型

?

類聲明相當于藍圖,通過藍圖可以創(chuàng)建多個類的實例。

? 通過類創(chuàng)建的實例,其中的類成員分為兩種:實例成員和類成員。

  • 實例成員:每個類的實例都是不同的個體,它們有自己獨有的一組類成員。且因為這些數(shù)據(jù)成員都和類的實例相關,所以稱為實例成員。
  • 靜態(tài)成員:實例成員是默認類型,但也可以聲明與類而不是實例相關的成員,也就是靜態(tài)成員。

3.1 字段

字段是在類或結構中直接聲明的任意類型的變量。

3.1.1 字段的語法

聲明字段的語法:

?????????????????????數(shù)據(jù)類型? 字段名;

例如:

?????????????????????int a;

3.1.2 顯示字段和隱式字段的初始化

隱式字段初始化:若字段被聲明且沒有被賦值,則為隱式初始化。

不同類型隱式初始化的默認值:?

  • 值類型為0
  • bool類型為false
  • 引用類型為null

3.1.3 字段的修飾符:readonly關鍵字&const關鍵字

被readonly和const修飾的字段一旦賦值便不能再被修改。

readonly關鍵字&const的區(qū)別:

  • 若使用readonly來修飾字段,則不需要在定義時初始化,可以在類的構造函數(shù)完成初始化。
  • 若使用const來修飾字段,如果沒有在定義時初始化,就會發(fā)生編譯錯誤。

語法:

? 訪問修飾符 const 數(shù)據(jù)類型 變量名=值;

? 訪問修飾符 readonly 數(shù)據(jù)類型 變量名;

3.1.4 靜態(tài)字段

若使用static關鍵字修飾字段,則字段為靜態(tài)字段。

? 靜態(tài)字段被類的所有實例所共享,所有實例都訪問同一內(nèi)存位置。

靜態(tài)字段必須通過類來訪問,不能像實例字段一樣通過類的對象的實例來訪問字段。

語法:

? 訪問修飾符 static 數(shù)據(jù)類型 變量名;? ? ? ? //靜態(tài)字段定義

? 訪問修飾符 數(shù)據(jù)類型 變量名;? ? ? ? ? ? ? ? ?//實例字段定義

實例1:

class People
{
    //聲明靜態(tài)字段
    public static string Name; 
    //聲明實例字段
    public int Age;
}

class Program
{
    static void Main(string[] args)
    {
        //實例字段通過實例對象訪問
        People one=new People();
        one.Age=18;
        //靜態(tài)字段只能通過類名訪問
        People.Name="人類";
    }
}

實例2:

3.2 常量

? 常量就是被const修飾的字段。

常量的特點:

  • 類成員常量類似于局部變量。區(qū)別在于常量在類聲明中,而局部變量在方法中。
  • 常量在堆中沒有自己的存儲位置,它在編譯時被編譯器替換。(類似C、C++中的#define)
  • 常量可以用類名直接訪問。
  • 常量本質(zhì)上就是靜態(tài)的。

3.3 屬性

屬性是對字段的擴展。

根據(jù)面向?qū)ο笳Z言的封裝思想(見第十章),字段最好設置為private。這樣能防止客戶端直接對字段進行篡改,從而保證了內(nèi)部成員的完整性的同時,也可以更好的為程序員提供編寫的便利。而屬性的作用就是為了訪問類中的私有字段。

屬性的語法:

? 訪問修飾符? 數(shù)據(jù)類型? 字段名{get{return 字段名;}set{字段名=value;}}

3.3.1 屬性的組成

屬性由set訪問器和get訪問器組成。

屬性可以只包含set或get,當只包含一個訪問器時,另一個可以省略、或者在前面加訪問修飾符private。

屬性除了開頭的語法,還有三種寫法:

  • 只包含get訪問器,為只讀屬性。
  • 只包含set訪問器,為只寫屬性。
  • 只聲明屬性(自動實現(xiàn)屬性)
屬性的示例:設置一個人的年齡字段,將賦值范圍設置在0-150之間
public class People

{
    //私有字段聲明
    private int age;
    private string name;
    private string sex;
    private string high;

    //公有屬性:屬性類型必須和字段屬性一致
    public? string? Age
    {
        //get訪問器:負責對字段值進行讀取(返回字段)
        get
        {
            return age;
        }
        //set訪問器:負責對字段值進行賦值(把用戶傳入的值賦給字段)
        //set訪問器里有隱式參數(shù)value
        set
        {
            //設置年齡范圍在0-150之間
            if(value<0 || value>150)
            {
                //拋出異常代碼
                throw(new ArgumentOutOfRangeException("AgeIntProPery"),value,"年齡必須在0-150之間"));
            }
            //value是隱式參數(shù):表示用戶傳入的值
            age=value;
        }
    }

    //只讀屬性
    public string Sex
    {
        get
        {
            return sex;
        }
    }
    //只寫屬性
    public string Name
    {
        private get
        {
            return name;
        }
        set
        {
            name=value;
        }
    }
    //自動實現(xiàn)屬性
    public string High
    {
        get;set;
    }
}

屬性字段命名規(guī)范:

  • 對于私有字段,為Camle寫法,即age、name這種。
  • 對于屬性名,為Pascal寫法,即Age、Name這種。

3.3.2 靜態(tài)屬性

? 靜態(tài)屬性與靜態(tài)字段類似。?若用static來修飾屬性,則屬性為靜態(tài)屬性。

靜態(tài)屬性有以下特點:

  • 靜態(tài)屬性屬于類級別,無法通過實例對象訪問。
  • 也不能訪問類的實例成員,但能被實例成員訪問。
  • 在類的內(nèi)部,可以僅使用名稱來引用靜態(tài)屬性
  • 在類的外部,可以通過類名或者using static結構來引用靜態(tài)屬性

實例:

public class People
{
    //靜態(tài)字段
    public static string Name;
    
    //靜態(tài)屬性
    public static string Name
    {
        get
        {
            return Name;
        }
        set
        {
            Name = value;
        }
    }
}

3.4 構造函數(shù)

構造函數(shù)主要用于初始化類的實例狀態(tài)。當我們用構造函數(shù)創(chuàng)建一個對象時,構造函數(shù)會為對象分配空間,并初始化類的成員。

使用構造函數(shù)的要求:

  • 如果希望從類的外部創(chuàng)建類的實例,需要將構造函數(shù)聲明為public
  • 構造函數(shù)名和類名相同
  • 構造函數(shù)不能有返回值

構造函數(shù)分為兩種:實例構造函數(shù)、靜態(tài)構造函數(shù)。

3.4.1 實例構造函數(shù)

實例構造函數(shù)用于創(chuàng)建和初始化類的實例。

其中使用new運算符創(chuàng)建對象的過程,其實是在調(diào)用實例構造函數(shù)來初始化類中所有實例成員。

實例構造函數(shù)的特點:

  • 構造函數(shù)可以有參數(shù)。
  • 構造函數(shù)可以進行方法重載。
  • 如果沒有為類顯示地定義一個構造函數(shù),則C#編譯器會自動生成一個函數(shù)體為空的默認無參的實例構造函數(shù)。如果有至少一個顯示構造函數(shù),則C#編譯器不會自動生成多的構造函數(shù)。
  • 可以為構造函數(shù)添加訪問修飾符。

使用實例構造函數(shù)的條件:

  • 構造函數(shù)必須和類同名。
  • 構造函數(shù)不允許有返回類型。
//實例構造函數(shù)示例:
class People
{
    private string name;

    //只讀屬性
    public string Name
    {
        get
        {
            return name;
        }
    }
    
    //實例構造函數(shù)
    //被public關鍵字修飾的構造函數(shù),稱為公共構造函數(shù)
    //被private關鍵字修飾的構造函數(shù),稱為私有構造函數(shù)
    public People()
    {
        name="憨憨一號";
    }

    public people(string name)
    {
        //this關鍵字指代當前類的實例,可以理解為當前實例對象的引用。
        this.name=name;
    }
}

class Program
{
    static void Main(string[] args)
    {
        People one=new People();
        People two=new People("憨憨二號");
        
        Console.Writeline(one.Name);    //打印“憨憨一號”
        Console.Writeline(two.Name);    //打印“憨憨二號”
    }
}

注意:如果一個類只定義了一個或多個私有構造函數(shù),而沒有其他公共構造函數(shù),則其他類就不能通過調(diào)用該類的私有構造函數(shù)來創(chuàng)建類的實例。

私有構造函數(shù)最典型的應用是設計模式中單例模式的實現(xiàn)。

單例模式是C#中的一種設計模式,他是指在設計一個類時,需要保證整個程序在運行期間只存在一個實例對象。

//設計模式中單例模式的實現(xiàn):
class People
{
    //聲明私有字段
    private string name;
    //聲明一個公開的、靜態(tài)的、類類型的變量
    public static People people;
    
    //聲明屬性
    public string Name
    {
        get{return name;}
    }

    //私有構造函數(shù),只能在類的內(nèi)部調(diào)用
    //也就是說用私有構造函數(shù)只能在類定義時被實例化
    private People()
    {
        Console.Writeline("私有函數(shù)被調(diào)用");
        this.name="Learning Hard";
    }
    
    //靜態(tài)方法,用于返回類的實例
    public static People GetInstance()
    {
        //將實例對象的引用賦值給變量
        people=new People();
        return people;
    }
}
class Program
{
    static void Main(string[] args)
    {
        //通過調(diào)用GetInstance()靜態(tài)方法返回一個Person的實例
        //此時不能使用new運算符來創(chuàng)建實例,即不能使用People one=new People()來創(chuàng)建實例
        People one=People.GetInstance();

        Console.Writeline("類實例的Name屬性為{0}",one.Name);
    }
}

3.4.2 靜態(tài)構造函數(shù)

靜態(tài)構造函數(shù)用于初始化類中的靜態(tài)成員。

在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,CLR(公共語言運行時)都將自動調(diào)用靜態(tài)構造函數(shù)。

class People
{
    
    private static string name;
    

    //聲明屬性
    public static string Name
    {
        get{return name;}
    }

    static People()
    {
        Console.WriteLine("靜態(tài)函數(shù)被調(diào)用");
        name="Learning Hard";
    }
    
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(People.Name);
        Console.WriteLine(People.Name);
    }
}

結果如下:

從上述代碼我們可知靜態(tài)構造函數(shù)有以下特點:

  • 靜態(tài)構造函數(shù)只會執(zhí)行一次
  • 靜態(tài)構造函數(shù)不能使用任何訪問修飾符,也不能帶任何參數(shù)
  • 不能直接調(diào)用靜態(tài)構造函數(shù)
  • 在程序中,我們無法控制執(zhí)行靜態(tài)構造函數(shù)的時機

3.5 析構函數(shù)

析構函數(shù)用于類銷毀之前釋放類實例所使用的托管和非托管資源。

析構函數(shù)的作用:

對于C#應用程序所創(chuàng)建的大多數(shù)對象,都可以使用.NET框架的垃圾回收器(GC)來隱式地執(zhí)行內(nèi)存管理任務,但如創(chuàng)建了一個封裝非托管資源的對象,在應用程序使用完這些非托管資源之后,垃圾回收器就需要運行對象的析構函數(shù)(即Finalize方法)來釋放這些資源。

使用析構函數(shù)的要求:

  • 只能在類中使用析構函數(shù)。
  • 一個類只能有一個析構函數(shù)。
  • 無法繼承或重載析構函數(shù)。
  • 無法顯示地調(diào)用析構函數(shù),由垃圾回收器自動調(diào)用。
  • 析構函數(shù)沒有參數(shù)和修飾符。

代碼示例:

class People
{
    //析構函數(shù)
    ~People()
    {
        Console.WriteLine("析構函數(shù)被調(diào)用");
    }
}
//該析構函數(shù)隱式調(diào)用了基類Object的Finalize方法,上面代碼中的析構函數(shù)將被隱式轉(zhuǎn)化為以下代碼


//
//override
protectd override void Finalize()
{
    try
    {
        Console.WriteLine("析構函數(shù)被調(diào)用");
    }
    finally
    {
        //調(diào)用基類方法
        base.Finalize();
    }
}
3.6 索引器

當一個類包含數(shù)組成員時,使用索引器可以大大地簡化類中數(shù)組的訪問。

3.6.1 this關鍵字

? this關鍵字在類中使用,是對當前實例的引用。

this關鍵字的使用要求:

  • 它只能出現(xiàn)在以下類成員的代碼塊中
    • 實例構造函數(shù)
    • 實例方法
    • 屬性和索引器的實例訪問器
  • 靜態(tài)成員不是實例的一部分,所以不能在任何靜態(tài)函數(shù)成員的代碼中使用this關鍵字

this關鍵字的用途:

  • 用于區(qū)分類的成員和局部變量或參數(shù)
  • 作為調(diào)用方法的實參
//實例:創(chuàng)建一個方法,將一個恒定值與輸入的值作比較,返回大值
class Program
{
    private int a;
    //this.a為恒定值,而a為輸入的形參(形參名與變量名相同是不推薦的哦)
    public int Add(int a)
    {
        return a>this.a
                ?a
                :this.a;
    }
}
3.6.2 索引器的語法

索引器的定義類似屬性,也具有get訪問器和set訪問器。

索引器的語法格式:

訪問修飾符? ?數(shù)據(jù)類型? this[索引類型 index]

{

? get{//返回類中某個元素}

? set{//對類中數(shù)組元素賦值}

}

//其中數(shù)據(jù)類型指的是要存取的數(shù)組的類型

//索引類型表示該索引器使用哪一個類型的索引來存取數(shù)組元素(可以為整形或字符串型)

示例:索引器也是一種針對私有字段進行訪問的方式

class People
{
    //可容納10個整數(shù)的整數(shù)數(shù)組
    private int[] intarray = new int[10];
    
    //索引器的定義
    //this表示所操作的是類對象的數(shù)組成員(可以簡單理解為索引器的名稱,注意索引器不能自定義名稱)
    public int this[int index]
    {
        get{return intarray[index];}
        set{intarray[index] = value;}
    }
}

class Program
{
    static void Main(string[] args)
    {
        People one=new People();
        
        one[0]=1;
        one[1]=2;
        one[2]=3;
        one[3]=4;
    }
}


4.類的實例

類的聲明只是用于創(chuàng)建類的實例的藍圖。一旦類被聲明,就可以創(chuàng)建類的實例。

4.1實例化

前面介紹了類中可以創(chuàng)建的類成員,但想要訪問這些實例成員,必須通過類的實例對象來完成。而要得到一個類的實例對象,就必須先聲明一個該類類型的變量,然后使用new運算符后跟類的實例構造函數(shù)來完成實例化。

4.1.1 實例對象

實例對象由變量和對象創(chuàng)建表達式組成。

  • 創(chuàng)建變量
    • 類是引用類型,其變量為數(shù)據(jù)引用和實際數(shù)據(jù)都申請了內(nèi)存。
    • 此變量所分配內(nèi)存是用來保存引用的。
  • 對象創(chuàng)建表達式
    • 對象創(chuàng)建表達式由關鍵字new后面跟一個類構造函數(shù)及其參數(shù)列表組成。
    • new運算符為任意指定類型的實例分配并初始化內(nèi)存。它依據(jù)類成員類型的不同從棧和堆里分配內(nèi)存。

類的實例語法: 類類型 變量 = new 類類型();

//類類型 變量? ? ? ? ? ? ? ? ? ?是創(chuàng)建變量

//new 類類型();? ??????是對象創(chuàng)建表達式

4.1.2 對象初始化語句

對象初始化語句擴展了創(chuàng)建語法,在表達式尾部放置一組成員初始化語句。

? 利用對象初始化語句,可以創(chuàng)建新的對象實例,設置字段和屬性的值。

兩種語法:

? new TypeName? ? ? ? ?{變量名=初始值,變量名=初始值,...}

? new TypeName(參數(shù)){變量名=初始值,變量名=初始值,...}

注意:

  • 初始化發(fā)生在構造方法執(zhí)行之后,因此要注意構造方法中初始化的值可能會在之后對象初始化中重置。

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文題目:【C#基礎學習】第十一章、類-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://www.chinadenli.net/article6/dsgpig.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃動態(tài)網(wǎng)站營銷型網(wǎng)站建設網(wǎng)站制作電子商務企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司