位置:首頁(yè) > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 泛型運(yùn)算符

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

在C#中,可以像其他方法一樣進(jìn)行運(yùn)算符的重寫,也可以在泛型類中實(shí)現(xiàn)此類重寫。例如,可在Fami<T>中定義如下隱式的轉(zhuǎn)換運(yùn)算符:

public static implicit operator List<Animal>(Farm<T> farm)

{

    List<Animal> result = new List<Animal>();

    foreach (T animal in farm)

    {

        result,Add(animal);

    }

    return result;

}

這樣,如有必要,就可以在Farm<T>中把Animal對(duì)象直接作為L(zhǎng)ist<Animal>來訪問。例如,使用下面的運(yùn)算符添加兩個(gè)Farm<T>實(shí)例,這是很方便的:

public static Farm<T> operator +(Farm<T> farml, List<T> farm2)

{

    Farm<T> result = new Farm<T>(); 

    foreach (T animal in farml)

    {

        result.Animals.Add(animal);

    }

    foreach (T animal in farm2)

    {

        if {!result.Animals.Contains(animal))

        {

            result.Animals.Add(animal);

        }

    }

    return result;

}

public static Farm<T> operator + (List<T> farml, Farm<T> farm2) => farm2 + farml;

接著可以添加Farm<Animal>和Farm<Cow>^實(shí)例,如下所示:

    Farm<Animal> newFarm = farm + dairyFarm;

在這行代碼中,dairyFarm(Farm<Cow>的實(shí)例)隱式轉(zhuǎn)換為L(zhǎng)ist<Animal>, List<Animal>可在Fann<T>中由重載運(yùn)算符+使用。

讀者可能認(rèn)為,使用下面的代碼也可以做到這一點(diǎn):

    public static Farm<T> operator +(Farm<T> farml, Farm<T> farm2){ ... }

但是,F(xiàn)arm<Cow>不能轉(zhuǎn)換為Farm<Animal>,所以匯總會(huì)失敗。為了更進(jìn)一步,可以使用下面的轉(zhuǎn)換運(yùn)算符來解決這個(gè)問題:

public static implicit operator Farm<Animal>(Farm<T> farm)

{

    Farm <Animal> result = new Farm <Animal>(); 

    foreach (T animal in farm)

    {

        result.Animals.Add(animal);

    }

    return result;

}

使用這個(gè)運(yùn)算符,F(xiàn)arm<T>的實(shí)例(如Farm<Cow>)就可以轉(zhuǎn)換為Farm<Animal>的實(shí)例,這解決了上面的問題。所以,可以使用上面列出的兩種方法中的一種,但是后者更適合,因?yàn)樗容^簡(jiǎn)單。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部