[英]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
,因此從object
到BaseObject
被視為典型的向下轉換,如果在運行時確定該對象不是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.