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

每個(gè).NET開發(fā)都應(yīng)掌握C#泛型的知識(shí)點(diǎn)

這篇具有很好參考價(jià)值的文章主要介紹了每個(gè).NET開發(fā)都應(yīng)掌握C#泛型的知識(shí)點(diǎn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

C#泛型編程是.NET framework 2.0的新特征,它提高了代碼安全性和代碼重用的問題。由于泛型必須指定類型,正確的使用可以避免了裝箱拆箱的問題;使用了泛型后,可以將算法或組件泛型化,基于類型參數(shù)支持任意數(shù)據(jù)類型,從而提高了代碼的重用性。 C#泛型編程在C#是很重要的特性,建議.NET開發(fā)熟練掌握它的基本知識(shí)點(diǎn),本文將介紹它的幾個(gè)知識(shí)點(diǎn),供大家參考。

1. 泛型類型和方法

泛型類型和方法允許在定義時(shí)不指定具體的類型,而是在使用時(shí)確定類型。泛型類型和方法可以增加代碼的靈活性和可重用性。這是C#泛型最基本的功能。

示例代碼:

?public?T?GetMax<T>(T?a,?T?b)?where?T?:?IComparable<T>
?{
         return a.CompareTo(b) > 0 ? a : b;
??}
??//?泛型類型方法示例
public class MyGenericList<T>
{
?????private?List<T>?items?=?new?List<T>();
?????public?void?Add(T?item){
             items.Add(item);
         }
}

2. 泛型約束

泛型約束允許限制泛型參數(shù)的類型,以增加類型安全性和代碼約束??梢允褂藐P(guān)鍵字`where`在泛型方法或泛型類型上應(yīng)用約束。大家可以參考前面的文章深入理解C#泛型:new與where關(guān)鍵字全解析

示例代碼:

     public void Process<T>(T item) where T : IComparable<T>
     {
         // 使用IComparable<T>接口進(jìn)行比較
     }
????//?以上代碼泛型參數(shù) T 受到了 IComparable<T>?泛型約束。
????//這個(gè)約束指定了傳入的類型 T 必須實(shí)現(xiàn) IComparable<T>?接口,
????//以便在方法內(nèi)部進(jìn)行比較操作

3. 泛型接口和委托

泛型接口和委托允許在定義接口和委托時(shí)使用泛型類型參數(shù),使其更通用和靈活。

示例代碼:

 // 泛型接口示例
public?interface?IRepository<T>
{
????void?Add(T?item);
}
// 泛型委托示例
?public?delegate?void?MyGenericDelegate<T>(T?item);

4. 泛型類的繼承和接口實(shí)現(xiàn)

泛型類可以繼承其他泛型類或非泛型類,也可以實(shí)現(xiàn)泛型或非泛型接口。可以在派生類或?qū)崿F(xiàn)類中指定具體的類型參數(shù)。

示例代碼:

   public class MyGenericList<T> : List<T>
     {
         // 實(shí)現(xiàn)泛型類List<T>
?????}
     public class MyRepository<T> : IRepository<T>
     {
         public void Add(T item)
         {
             // 實(shí)現(xiàn)IRepository<T>接口
         }
     }
?????//以上是常用的各種helper類示例,熟悉吧!

5. 泛型集合類

C#還提供了許多內(nèi)置的泛型集合類來提升開發(fā)效率,例如List、Dictionary<TKey, TValue>等。泛型集合類提供了類型安全和高效的數(shù)據(jù)存儲(chǔ)和檢索。

示例代碼:

   List<string> names = new List<string>();
     names.Add("張山");
     names.Add("李四");
???
?????Dictionary<int,?string>?example=?new?Dictionary<int,?string>();
?????example.Add(1,?"歡迎加入公眾號(hào)");
?????example.Add(2,?"dotnet開發(fā)跳槽");

6. 泛型委托和事件

泛型委托和事件允許定義具有泛型參數(shù)的委托類型和事件處理器??梢栽谑褂脮r(shí)指定具體的類型參數(shù)。多用于訂閱事件。

示例代碼:

// 定義一個(gè)泛型委托 MyGenericDelegate<T>,表示可以接受類型為 T 的參數(shù)的委托
public delegate void MyGenericDelegate<T>(T item);

// 定義一個(gè)泛型類 EventPublisher<T>,用于發(fā)布泛型事件
public class EventPublisher<T>
{
    // 聲明一個(gè)泛型事件 MyEvent,事件處理器類型為 MyGenericDelegate<T>
    public event MyGenericDelegate<T> MyEvent;

    // 觸發(fā)事件的方法,將傳入的參數(shù) item 傳遞給事件處理器
    public void RaiseEvent(T item)
{
        // 使用空值條件運(yùn)算符 ?. 檢查事件是否有訂閱者,如果有,則調(diào)用委托的 Invoke 方法
        MyEvent?.Invoke(item);
    }
}

????
//調(diào)用?
public static void Main()
{
     // 創(chuàng)建事件處理器方法
       void MyEventHandler(int item)
?????  {
            Console.WriteLine($"Event handled: {item}");
        }

        // 實(shí)例化 EventPublisher<int> 類并訂閱事件
        EventPublisher<int> publisher = new EventPublisher<int>();
        publisher.MyEvent += MyEventHandler;

        // 調(diào)用 RaiseEvent 方法來觸發(fā)事件
        int eventData = 42;
        publisher.RaiseEvent(eventData);
?}

7. 泛型約束和接口協(xié)變/逆變

C# 4.0引入了接口的協(xié)變和逆變,使得泛型類型參數(shù)可以在接口中進(jìn)行協(xié)變(`out`)或逆變(`in`)。這主要解決之前泛型接口調(diào)用子類父類類型不同而出現(xiàn)的問題。協(xié)變?cè)试S將派生類型轉(zhuǎn)換為基類型,逆變?cè)试S將基類型轉(zhuǎn)換為派生類型。大家可以看這篇文章C#泛型的逆變協(xié)變之個(gè)人理解。

//協(xié)變
public interface IAnimal<out T>
{
?????T?Get();
}
?//逆變???
public interface ICage<in T>
{
      void Add(T animal);
}

8. 泛型默認(rèn)值

泛型類型的默認(rèn)值可以使用`default(T)`獲取,無需了解具體的類型。 默認(rèn)值對(duì)于泛型方法或類中可能為null的引用類型或可空值類型非常有用。

     public void Process<T>(T item)
     {
         T defaultValue = default(T);
         if (item.Equals(defaultValue))
         {
             // 處理默認(rèn)值情況
         }
     }

結(jié)語

本文講述了C#泛型編程的知識(shí)點(diǎn)及關(guān)鍵概念和用法。它們可以提高代碼的可重用性、類型安全性和性能等。希望本文對(duì)你有所收獲,你還知道C#泛型的哪些知識(shí)點(diǎn)?歡迎留言討論和吐槽。

參考:微軟.NET官方文檔文章來源地址http://www.zghlxwxcb.cn/news/detail-617667.html

來源公眾號(hào):DotNet開發(fā)跳槽

到了這里,關(guān)于每個(gè).NET開發(fā)都應(yīng)掌握C#泛型的知識(shí)點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(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)文章

  • 每個(gè).NET開發(fā)都應(yīng)掌握的C#異常處理知識(shí)點(diǎn)

    上篇文章講述了C#集合知識(shí)點(diǎn),本文將介紹C#異常處理知識(shí)點(diǎn)。異常處理是.NET開發(fā)中至關(guān)重要的一部分,它允許開發(fā)者在程序出現(xiàn)錯(cuò)誤或不正常情況時(shí)采取適當(dāng)?shù)拇胧?,從而提高?yīng)用程序的穩(wěn)定性和可靠性。本文將介紹C#異常處理知識(shí)點(diǎn),異常的基本概念略過,請(qǐng)查看官網(wǎng)。

    2024年02月08日
    瀏覽(24)
  • 每個(gè).NET開發(fā)都應(yīng)掌握的C#特性(Attribute)知識(shí)點(diǎn)

    上篇文章講述了C#反射知識(shí)點(diǎn),本文將介紹C#特性(Attribute)的知識(shí)點(diǎn)。C#特性(Attribute)是一種強(qiáng)大的元數(shù)據(jù)機(jī)制,用于為代碼元素(如類、方法、屬性等)添加信息,以影響它們的行為或提供額外的信息。本文將介紹C#特性每個(gè).NET開發(fā)都應(yīng)熟悉的知識(shí)點(diǎn),希望對(duì)大家開發(fā)有

    2024年02月08日
    瀏覽(24)
  • 每個(gè).NET開發(fā)都應(yīng)掌握的C#處理文件系統(tǒng)I/O知識(shí)點(diǎn)

    上篇文章講述了C#多線程知識(shí)點(diǎn),本文將介紹C#處理文件的知識(shí)點(diǎn)。在.NET開發(fā)領(lǐng)域,文件系統(tǒng)I/O是一個(gè)至關(guān)重要的主題,尤其是在處理文件、目錄和數(shù)據(jù)存儲(chǔ)方面。C#作為.NET平臺(tái)的主要編程語言,提供了豐富而強(qiáng)大的文件系統(tǒng)I/O功能,為開發(fā)人員提供了靈活的工具,使其能夠

    2024年02月05日
    瀏覽(20)
  • 每個(gè).NET開發(fā)都應(yīng)掌握的linq知識(shí)點(diǎn)

    LINQ是C#3.0引入的特性,讓處理對(duì)象就像執(zhí)行SQL語句一樣簡(jiǎn)單,對(duì)于提高C#開發(fā)效率有革命性的作用。?對(duì)于每個(gè).NET開發(fā)者來說,掌握C#的LINQ知識(shí)點(diǎn)是非常重要的。LINQ是C#的一個(gè)強(qiáng)大的特性,它為數(shù)據(jù)查詢和操作提供了簡(jiǎn)潔、統(tǒng)一的語法,使得數(shù)據(jù)處理變得更加直觀和靈活。 以

    2024年02月14日
    瀏覽(21)
  • C#(六十二)之泛型的約束

    C#(六十二)之泛型的約束

    類型約束 基類約束有兩個(gè)重要的目的。 1:它允許在泛型類中使用有約束指定的基類成員。 2:確保只能使用支持指定基類或派生類的類型實(shí)例。 約束是使用?where?上下文指定的。 下表列出了五種類型的約束: 約束 說明 T:struct 類型參數(shù)必須是值類型??梢灾付ǔ?/p>

    2024年02月17日
    瀏覽(20)
  • C#學(xué)習(xí)筆記--數(shù)據(jù)結(jié)構(gòu)、泛型、委托事件等進(jìn)階知識(shí)點(diǎn)

    C#學(xué)習(xí)筆記--數(shù)據(jù)結(jié)構(gòu)、泛型、委托事件等進(jìn)階知識(shí)點(diǎn)

    ArrayList 元素類型以O(shè)bject類型存儲(chǔ),支持增刪查改的數(shù)組容器。 因而存在裝箱拆箱操作,謹(jǐn)慎使用。 ArrayList和數(shù)組區(qū)別? ArrayList使用不用說明固定長(zhǎng)度,數(shù)組則需要 數(shù)組存儲(chǔ)的是指定類型的,ArrayList是Object ArrayList存在裝箱拆箱,數(shù)組不存在 ArrayList數(shù)組長(zhǎng)度用Count獲取 而數(shù)組

    2024年02月08日
    瀏覽(22)
  • 詳解Java中的泛型(泛型的語法,擦除機(jī)制,泛型的上界)

    詳解Java中的泛型(泛型的語法,擦除機(jī)制,泛型的上界)

    目錄 一.什么是泛型 二.Java中為什么要使用泛型 三.泛型的語法 四.泛型類的使用 五.泛型的編譯機(jī)制(擦除機(jī)制) 六.泛型的上界 泛型(Generics)是Java SE 5中引入的一個(gè)新特性,可以 使Java中的類和方法具有更廣泛的類型范圍 。通俗的說,它使得我們可以在定義類和方法時(shí)指定

    2024年02月05日
    瀏覽(24)
  • 泛型的通配符

    泛型的通配符

    類型的上界決定了泛型的范圍。 我們發(fā)現(xiàn)指定了泛型的上界為數(shù)值類Number時(shí),傳入Boolean類型就會(huì)報(bào)錯(cuò)。 如果沒有指定類型的邊界,可以認(rèn)可 T extends Object,當(dāng)指定了某個(gè)類型為上界,那么只接受某類型本身和子類型作為E的類型實(shí)參 我們要實(shí)現(xiàn)一個(gè)類去找數(shù)組的一個(gè)的最大值

    2023年04月08日
    瀏覽(21)
  • 【Java】泛型的簡(jiǎn)單使用

    【Java】泛型的簡(jiǎn)單使用

    在了解泛型之前我們先了解什么是包裝類,在Java中由于基本類型不是繼承自O(shè)bject,為了在泛型代碼中可以支持基本類型,Java給每個(gè)基本類型都對(duì)應(yīng)了一個(gè)包裝類型 基本數(shù)據(jù)類型 包裝類 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 除了 Integer

    2024年02月04日
    瀏覽(38)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包