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

C# as運(yùn)算符

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

as運(yùn)算符使用下面的語(yǔ)法,把一種類型轉(zhuǎn)換為指定的引用類型:

    <operand> as <type>

這只適用于下列情況:

    ? <operand>的類型是<type>

    ? <operand>可以隱式轉(zhuǎn)換為<ape>類型

    ? <operand>可以封箱到<type>類型中

如果不能從轉(zhuǎn)換為<(y/7e>,則表達(dá)式的結(jié)果就是null。

基類到派生類的轉(zhuǎn)換可以使用顯式轉(zhuǎn)換來(lái)進(jìn)行,但這并不總是有效的。考慮前面示例中的兩個(gè)類ClassA和ClassD,其中ClassD繼承了 ClassA:

    class ClassA : IMylnterface {} 

    class ClassD : ClassA {}

下面的代碼使用as運(yùn)算符把objl中存儲(chǔ)的ClassA實(shí)例轉(zhuǎn)換為ClassD類型:

    ClassA objl = new ClassA{};

    ClassD obj2 = objl as ClassD;

則obj2的結(jié)果為null。

    還可以使用多態(tài)性把ClassD實(shí)例存儲(chǔ)在ClassA類型的變量中。下面的代碼演示了這一點(diǎn),ClassA類型的變量包含ClassD類型的實(shí)例,使用as運(yùn)算符把ClassA類型的變量轉(zhuǎn)換為ClassD類型。

    ClassD objl = new ClassD{);

    ClassA obj2 = objl;

    ClassD obj3 = obj2 as ClassD;

這次obj3最后包含與objl相同的對(duì)象引用,而不是null。

因此,as運(yùn)算符非常有用,下面使用簡(jiǎn)單類型轉(zhuǎn)換的代碼會(huì)拋出一個(gè)異常:

    ClassA objl = new ClassA();

    ClassD obj2 = (ClassD)objl;

與此代碼等價(jià)的as代碼會(huì)把null值賦予obj2,不會(huì)拋出異常。這表示,下面的代碼在C#應(yīng)用程序中是很常見(jiàn)的:

public void MilkCow(Animal myAnimal)

{

    Cow myCow = myAnimal as Cow; 

    if (myCow != null)

    {

        myCow.Milk();

    }

    else

    {

      WriteLine($"{myAnimal.Name} isn't a cow, and so can it be milked.");

    }

}

這要比檢查異常簡(jiǎn)單得多!

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

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