第一部分:C#語(yǔ)言基礎(chǔ)

第1章 C#類型基礎(chǔ)

C#中的兩種類型:值類型和引用類型

1.1 值類型和引用類型

值類型包括了結(jié)構(gòu)和枚舉,引用類型則包括了類、接口、委托等。還有一種特殊的值類型,稱為簡(jiǎn)單類型(Simple Type),比如byte,int等。

1.2 對(duì)象判等

1.3 對(duì)象復(fù)制

1.3.1 淺度復(fù)制

淺度復(fù)制和深度復(fù)制是以如何復(fù)制對(duì)象的成員來(lái)區(qū)分的。
??淺度復(fù)制結(jié)果就是:新對(duì)象的引用成員和復(fù)制對(duì)象的引用成員指向了同一個(gè)對(duì)
象。

1.3.2 深度

深度復(fù)制就是將引用成員指向的對(duì)象也進(jìn)行復(fù)制。實(shí)際的過程是創(chuàng)建新的引用成員指向的對(duì)象,然后復(fù)制對(duì)象中所包含的數(shù)據(jù)。

第2章 C#中的泛型

2.1 理解泛型

2.1.1 為什么要有泛型

以下是一個(gè)類里面定一個(gè)一個(gè)普通方法和一個(gè)泛型方法,泛型的有點(diǎn)無(wú)疑是簡(jiǎn)潔了代碼。
提供冒泡排序的類:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SortHelper
{
    //int 類型
    public class BubbleSortHelper
    {
        public int[] BubbleSortIntArray(int[] intArray)
        {
            int[] array = new int[intArray.Count()];
            if (intArray.Count() == 0)
            {
                return array;
            }
            int length = intArray.Length;
            int temp = 0;
            for (int i = 0; i < length - 1; i++)//冒泡排序,兩兩比較,小的在前,大的在后
            {
                for (int j = 0; j < length - 1 - i; j++)
                {
                    if (intArray[j] > intArray[j + 1])
                    {
                        temp = intArray[j];
                        intArray[j] = intArray[j + 1];
                        intArray[j + 1] = temp;
                    }
                }
            }

            array = intArray;
            return array;
        }
        /// <summary>
        /// fan泛型
        /// </summary>
        /// <param name="Array"></param>
        /// <returns></returns>
        public T[] BubbleSortTArray<T>(T[] Array) where T : IComparable
        {
            T[] array = new T[Array.Count()];
            if (Array.Count() == 0)
            {
                return array;
            }
            int length = Array.Length;
            T temp;
            for (int i = 0; i < length - 1; i++)//冒泡排序,兩兩比較,小的在前,大的在后
            {
                for (int j = 0; j < length - 1 - i; j++)
                {
                    if (Array[j].CompareTo(Array[j + 1]) > 0)
                    {
                        temp = Array[j];
                        Array[j] = Array[j + 1];
                        Array[j + 1] = temp;
                    }
                }
            }

            array = Array;
            return array;
        }


        public int CompareTo(object obj)
        {
            throw new NotImplementedException();
        }
    }
}

在主方法調(diào)用一下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SortHelper
{
    class Program
    {
        static void Main(string[] args)
        {
            //調(diào)用冒泡排序的int 數(shù)組
            int[] testArray = { 1, 3, 9, 4, 5, 3, 2, 5, 4, 5, 8, 8, 8 };
            BubbleSortHelper bsh = new BubbleSortHelper();
            int[] result = bsh.BubbleSortTArray(testArray);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < result.Count(); i++)
            {
                sb.Append(result[i] + ",");
            }
            sb.Remove(sb.Length - 1, 1);
            Console.WriteLine(sb);

            //使用泛型方法
            char[] TArray = { 'a','f','b' };
            BubbleSortHelper bsh1 = new BubbleSortHelper();
            char[] result1 = bsh1.BubbleSortTArray<char>(TArray);
            StringBuilder sb1 = new StringBuilder();
            for (int i = 0; i < result1.Count(); i++)
            {
                sb1.Append(result1[i] + ",");
            }
            sb1.Remove(sb1.Length - 1, 1);
            Console.WriteLine(sb1);

            Console.ReadLine();
        }
    }
}

執(zhí)行結(jié)果:

冒泡排序使用泛型

小技巧:當(dāng)程序大量使用泛型類型的時(shí)候,或者泛型的類型參數(shù)個(gè)數(shù)比較多的時(shí)候,代碼可能看著比較散亂,不夠簡(jiǎn)潔。此時(shí)可以使用using指令來(lái)聲明一個(gè)代表著泛型類型的集合:

using IntList = List<int>;
class Program {
static void Main(string[] args) {
IntList list = new IntList();
list.Add(100);
// 其余代碼略
}
}

這樣看上去簡(jiǎn)單多了,但是還有一個(gè)問題,就是不能跨文件使用,換而言之,在同一項(xiàng)目同一命名空間下的另一個(gè)文件中,無(wú)法使用這個(gè)IntList集合。此時(shí),可以采用繼承泛型類的方式來(lái)解決,例如聲明下面這樣一個(gè)類:

public class IntList :List<int> {}

第3章 C#中的委托和事件

3.1 理解委托

3.1.1 將方法作為方法的

委托是一個(gè)類,它定義了方法的類型,使得可以將方法當(dāng)作另一個(gè)方法的參數(shù)來(lái)進(jìn)行傳遞,這種將方法動(dòng)態(tài)地賦給參數(shù)的做法,可以避免在程序中大量使用If-Else(Switch)語(yǔ)句,同時(shí)使程序具有更好的可擴(kuò)展性。

3.2 事件的由來(lái)

使用事件不僅能獲得比委托更好的封裝性,還能限制含有事件的類型的能力。

聯(lián)系方式

個(gè)人微信

公眾號(hào)_DotNet微說(shuō).jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,669評(píng)論 9 118
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,655評(píng)論 1 51
  • 我們都知道,如果單位提出解除勞動(dòng)合同,是需要支付經(jīng)濟(jì)補(bǔ)償金或賠償金的。單位為了不支付這筆錢,常要求員工"主動(dòng)...
    楊楊小白閱讀 2,155評(píng)論 0 2
  • 致敬亦師亦友的同事們: 離別,最終還是要說(shuō)出口! 再見了,腫瘤二科的家人們! 未來(lái)不知…… 但昨日曾有你們的陪伴和...
    盛翔閱讀 394評(píng)論 1 2
  • 《舊唐書》里有一句話說(shuō):“父有諍子不敗家?!闭?,敢言直諫也。一個(gè)敢于表達(dá)內(nèi)心真實(shí)想法的孩子,是可貴的;而一個(gè)合格的...
    紋物閱讀 442評(píng)論 0 0

友情鏈接更多精彩內(nèi)容