最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#語言入門類型和成員

 更新時間:2021年12月24日 09:30:34   作者:Microsoft  
這篇文章主要介紹了c#語言入門類型和成員,類 是最基本的 C# 類型。 類是一種數(shù)據(jù)結(jié)構(gòu),可在一個單元中就將狀態(tài)和操作結(jié)合起來。 類為類實例提供了定義。類支持繼承和多形性,即派生類 以擴(kuò)展和專門針對基類的機(jī)制,下面來看看文章的詳細(xì)介紹

前言:

作為面向?qū)ο蟮恼Z言,C# 支持封裝、繼承和多態(tài)性這些概念。 類可能會直接繼承一個父類,并且可以實現(xiàn)任意數(shù)量的接口。 若要用方法重寫父類中的虛方法,必須使用 override 關(guān)鍵字,以免發(fā)生意外重定義。 在 C# 中,結(jié)構(gòu)就像是輕量級類,是可以實現(xiàn)接口但不支持繼承的堆棧分配類型。 C# 提供了 record class record struct 類型,這些類型的目的主要是存儲數(shù)據(jù)值。

一、類和對象

類 是最基本的 C# 類型。 類是一種數(shù)據(jù)結(jié)構(gòu),可在一個單元中就將狀態(tài)(字段)和操作(方法和其他函數(shù)成員)結(jié)合起來。 類為類實例(亦稱為“對象”)提供了定義 。 類支持 繼承 和 多形性,即 派生類 可以擴(kuò)展和專門針對 基類 的機(jī)制。

新類使用類聲明進(jìn)行創(chuàng)建。 類聲明以標(biāo)頭開頭。 標(biāo)頭指定以下內(nèi)容:

  • 類的特性和修飾符
  • 類的名稱
  • 基類(從基類繼承時)
  • 接口由該類實現(xiàn)。

標(biāo)頭后面是類主體,由在分隔符 { 和 } 內(nèi)編寫的成員聲明列表組成。

以下代碼展示的是簡單類 Point 的聲明:

public class Point
{
    public int X { get; }
    public int Y { get; }
    
    public Point(int x, int y) => (X, Y) = (x, y);
}


類實例是使用 new 運(yùn)算符進(jìn)行創(chuàng)建,此運(yùn)算符為新實例分配內(nèi)存,調(diào)用構(gòu)造函數(shù)來初始化實例,并返回對實例的引用。 以下語句創(chuàng)建兩個 Point 對象,并將對這些對象的引用存儲在兩個變量中:

var p1 = new Point(0, 0);
var p2 = new Point(10, 20);


當(dāng)無法再訪問對象時,對象占用的內(nèi)存會被自動回收。 沒有必要也無法在 C# 中顯式解除分配對象。

1、類型參數(shù)

泛型類定義類型參數(shù)。 類型參數(shù)是用尖括號括起來的類型參數(shù)名稱列表。 類型參數(shù)跟在類名后面。 然后,可以在類聲明的主體中使用類型參數(shù)來定義類成員。 在以下示例中,Pair 的類型參數(shù)是 TFirst TSecond

public class Pair<TFirst, TSecond>
{
    public TFirst First { get; }
    public TSecond Second { get; }
    
    public Pair(TFirst first, TSecond second) => 
        (First, Second) = (first, second);
}


聲明為需要使用類型參數(shù)的類類型被稱為 泛型類類型。 結(jié)構(gòu)、接口和委托類型也可以是泛型。 使用泛型類時,必須為每個類型參數(shù)提供類型自變量:

var pair = new Pair<int, string>(1, "two");
int i = pair.First;     //TFirst int
string s = pair.Second; //TSecond string


包含類型自變量的泛型類型(如上面的 Pair<int,string> )被稱為 構(gòu)造泛型類型。

2、基類

類聲明可以指定基類。 在類名和類型參數(shù)后面加上冒號和基類的名稱。 省略基類規(guī)范與從 object 類型派生相同。 在以下示例中,Point3D 的基類是 Point 在第一個示例中,Point 的基類是 object:

public class Point3D : Point
{
    public int Z { get; set; }
    
    public Point3D(int x, int y, int z) : base(x, y)
    {
        Z = z;
    }
}


類繼承其基類的成員。 繼承意味著一個類隱式包含其基類的幾乎所有成員。 類不繼承實例、靜態(tài)構(gòu)造函數(shù)以及終結(jié)器。 派生類可以在其繼承的成員中添加新成員,但無法刪除繼承成員的定義。 在上面的示例中,Point3D 從 Point 繼承了 X 和 Y 成員,每個 Point3D 實例均包含三種屬性(X、Y 和 Z)。

可以將類類型隱式轉(zhuǎn)換成其任意基類類型。 類類型的變量可以引用相應(yīng)類的實例或任意派生類的實例。

?例如,類聲明如上,Point 類型的變量可以引用 Point 或 Point3D:

Point a = new(10, 20);
Point b = new Point3D(10, 20, 30);


二、結(jié)構(gòu)

類定義可支持繼承和多形性的類型。 它們使你能夠基于派生類的層次結(jié)構(gòu)創(chuàng)建復(fù)雜的行為。 相比之下,結(jié)構(gòu)類型是較為簡單的類型,其主要目的是存儲數(shù)據(jù)值。 結(jié)構(gòu)不能聲明基類型;它們從 System.ValueType 隱式派生。 不能從 struct 類型派生其他 struct 類型。 這些類型已隱式密封。

public struct Point
{
    public double X { get; }
    public double Y { get; }
    
    public Point(double x, double y) => (X, Y) = (x, y);
}


三、接口

接口定義了可由類和結(jié)構(gòu)實現(xiàn)的協(xié)定*。 定義接口來聲明在不同類型之間共享的功能。 例如,System.Collections.Generic.IEnumerable<T> 接口定義了一個遍歷集合(如數(shù)組)中所有項的一致方法。 接口可以包含方法、屬性、事件和索引器。 接口通常不提供所定義成員的實現(xiàn),僅指定必須由實現(xiàn)接口的類或結(jié)構(gòu)提供的成員。

接口可以采用 多重繼承。 在以下示例中,接口 IComboBox 同時繼承自 ITextBox IListBox。

interface IControl
{
    void Paint();
}

interface ITextBox : IControl
{
    void SetText(string text);
}

interface IListBox : IControl
{
    void SetItems(string[] items);
}

interface IComboBox : ITextBox, IListBox { }


類和結(jié)構(gòu)可以實現(xiàn)多個接口。 在以下示例中,類 EditBox 同時實現(xiàn) IControl IDataBound

interface IDataBound
{
    void Bind(Binder b);
}

public class EditBox : IControl, IDataBound
{
    public void Paint() { }
    public void Bind(Binder b) { }
}


當(dāng)類或結(jié)構(gòu)實現(xiàn)特定接口時,此類或結(jié)構(gòu)的實例可以隱式轉(zhuǎn)換成相應(yīng)的接口類型。 例如:

EditBox editBox = new();
IControl control = editBox;
IDataBound dataBound = editBox;


四、枚舉

枚舉類型定義了一組常數(shù)值。 以下 enum 聲明了定義不同根蔬菜的常數(shù):

public enum SomeRootVegetable
{
    HorseRadish,
    Radish,
    Turnip
}


還可以定義一個 enum 作為標(biāo)志組合使用。 以下聲明為四季聲明了一組標(biāo)志。

可以隨意搭配季節(jié)組合,包括 All 值(包含所有季節(jié)):

[Flags]
public enum Seasons
{
    None = 0,
    Summer = 1,
    Autumn = 2,
    Winter = 4,
    Spring = 8,
    All = Summer | Autumn | Winter | Spring
}


以下示例顯示了前面兩個枚舉的聲明:

var turnip = SomeRootVegetable.Turnip;

var spring = Seasons.Spring;
var startingOnEquinox = Seasons.Spring | Seasons.Autumn;
var theYear = Seasons.All;


五、可為 null 的類型

任何類型的變量都可以聲明為“不可為 null”或“可為 null”。 可為 null 的變量包含一個額外的 null 值,表示沒有值。 可為 null 的值類型(結(jié)構(gòu)或枚舉)由 System.Nullable<T> 表示。 不可為 null 和可為 null 的引用類型都由基礎(chǔ)引用類型表示。 這種區(qū)別由編譯器和某些庫讀取的元數(shù)據(jù)體現(xiàn)。 當(dāng)可為 null 的引用在沒有先對照 null 檢查其值的情況下取消引用時,編譯器會發(fā)出警告。 當(dāng)對不可為 null 的引用分配了可能為 null 的值時,編譯器也會發(fā)出警告。 以下示例聲明了“可為 null 的 int”,并將其初始化為 null。 然后將值設(shè)置為 5。 該示例通過“可為 null 的字符串” ** 演示了同一概念。

int? optionalInt = default; 
optionalInt = 5;
string? optionalText = default;
optionalText = "Hello World.";


六、元組

C# 支持元組,后者提供了簡潔的語法來將多個數(shù)據(jù)元素分組成一個輕型數(shù)據(jù)結(jié)構(gòu)。

通過聲明 ( 和 ) 之間的成員的類型和名稱來實例化元組,如下例所示:

(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine($"Sum of {t2.Count} elements is {t2.Sum}.");
//Output:
//Sum of 3 elements is 4.5.


元組為具有多個成員的數(shù)據(jù)結(jié)構(gòu)提供了一種替代方法

到此這篇關(guān)于c#語言入門類型和成員的文章就介紹到這了,更多相關(guān)c#類型和成員內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中is與as的區(qū)別分析

    C#中is與as的區(qū)別分析

    這篇文章主要介紹了C#中is與as的區(qū)別,較為詳細(xì)的分析了is與as的原理與特性及用法區(qū)別,具有很好的學(xué)習(xí)借鑒價值,需要的朋友可以參考下
    2014-10-10
  • C#如何自動識別文件的編碼

    C#如何自動識別文件的編碼

    相信每位程序員在日常學(xué)習(xí)工作中,文件編碼識別是必不可少的,一旦編碼錯誤就會出現(xiàn)讓人頭疼的亂碼,那么下面這篇文章將給大家介紹如何通過C#來自動識別文件的編碼。文中給出了詳細(xì)的示例代碼,對大家的理解很有幫助,下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • c#中實現(xiàn)圖片灰度化技術(shù)詳解

    c#中實現(xiàn)圖片灰度化技術(shù)詳解

    這篇文章主要介紹了c#中實現(xiàn)圖片灰度化技術(shù)詳解,本文給出計算公式和實現(xiàn)代碼以及圖片例子,需要的朋友可以參考下
    2014-08-08
  • 基于DateTime.ParseExact方法的使用詳解

    基于DateTime.ParseExact方法的使用詳解

    本篇文章是對DateTime.ParseExact方法的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#獲取時間戳的方法及時間戳轉(zhuǎn)換問題

    C#獲取時間戳的方法及時間戳轉(zhuǎn)換問題

    本文主要介紹了C#獲取時間戳的方法及時間戳轉(zhuǎn)換問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • c# 獲取已安裝的打印機(jī)并調(diào)用打印文件

    c# 獲取已安裝的打印機(jī)并調(diào)用打印文件

    這篇文章主要介紹了c#如何獲取已安裝的打印機(jī)并調(diào)用打印文件,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • C#生成帶二維碼的專屬微信公眾號推廣海報實例代碼

    C#生成帶二維碼的專屬微信公眾號推廣海報實例代碼

    這篇文章主要給大家介紹了關(guān)于利用C#如何生成帶二維碼的專屬微信公眾號推廣海報的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們一起來看看吧
    2018-12-12
  • C#創(chuàng)建Windows服務(wù)的實現(xiàn)方法

    C#創(chuàng)建Windows服務(wù)的實現(xiàn)方法

    這篇文章主要介紹了C#創(chuàng)建Windows服務(wù)的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 基于WPF實現(xiàn)繪制地鐵路線圖

    基于WPF實現(xiàn)繪制地鐵路線圖

    經(jīng)常坐地鐵,卻不知道地鐵多少條線路?哪個站下車?本文就來帶大家利用WPF繪制深圳地鐵路線圖,從而帶大家掌握WPF在圖形繪制方面的一些知識,希望對大家有所幫助
    2023-06-06
  • unity 文件流讀取圖片與www讀取圖片的區(qū)別介紹

    unity 文件流讀取圖片與www讀取圖片的區(qū)別介紹

    這篇文章主要介紹了unity 文件流讀取圖片與www讀取圖片的對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

闵行区| 丰城市| 仁寿县| 三台县| 庆阳市| 武穴市| 庆云县| 庆云县| 营山县| 镇坪县| 玉林市| 平乐县| 宿迁市| 商丘市| 益阳市| 华蓥市| 利川市| 封开县| 大方县| 望江县| 阜城县| 鄂伦春自治旗| 成武县| 南康市| 东乡县| 西贡区| 石河子市| 吉林市| 湖南省| 揭东县| 刚察县| 神池县| 云霄县| 同德县| 策勒县| 凉山| 平罗县| 萍乡市| 峨眉山市| 闸北区| 嘉义县|