簡體   English   中英

使用隱式運算符重載進行轉換

[英]Cast using implicit operator overloading

鑒於兩個類:

class BaseObject
{
}

class Some
{
    public static implicit operator BaseObject(Some d)
    {
        Console.WriteLine("Some.implicit");
        return new BaseObject();
    }
}

我需要能夠使用隱式運算符重載從object (實際上是Some )轉換為BaseObject 我使用了顯式InvalidCastException ,但由於InvalidCastException ,它無效:

object obj = new Some();

var baseObject = (BaseObject)(obj); // InvalidCastException here

更新對於那些不了解隱式強制轉換的人。 這有效:

Some obj = new Some();

BaseObject baseObject = obj; // writes "Some.implicit"

問題是我收到obj作為object

在編譯時已知源和目標類型時,也會在編譯時確定強制類型。 在這種情況下, BaseObject派生自object ,因此從objectBaseObject被視為典型的向下轉換,如果在運行時確定該對象不是BaseObject

要在運行時確定強制轉換的類型,您需要使用dynamic

dynamic obj = new Some();
var baseObject = (BaseObject)obj; // works

或者如果obj的聲明無法更改,

object obj = new Some();
var baseObject = (BaseObject)(dynamic)obj; // also works

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM