爲什麼類型轉換昂貴?類型轉換需要什麼?爲什麼類型轉換昂貴?
好的,我知道它的價值類型,但讓我們暫時排除它們。我們來談談引用類型之間的轉換。如果我這樣寫:
class Animal { }
class Dog : Animal { }
例1
var dog = new Dog();
object obj = dog;
例2
public Animal GetAnimal()
{
return new Dog();
}
object obj = GetAnimal();
多少類型轉換就上面的例子中包含他們爲什麼貴?
據我所知,它只是一個新的4字節指針,必須分配在線程的本地參數堆棧上,並且新創建的引用指針的對象引用指向同一個舊地址。爲什麼這是一件昂貴的事情?正在分配一個新的對象引用CPU密集型?然後,甚至抄襲同一個對象引用必須在下面的例子中意味着該成本,如:
Animal fish = new Animal();
Animal anotherFish = fish;
那一定是同樣昂貴呢?
請定義「昂貴」......是什麼讓你覺得他們*是昂貴的? –
@JonSkeet:這真是我問題的一部分。泛型或泛型的全部論點是避免了與類型轉換相關的成本。我意識到,我一直在考慮這一點,卻沒有多少考慮。我認爲直到現在,它涉及更多的CPU時間,這是昂貴的。 –
一個說明。使用[轉換運算符](http://msdn.microsoft.com/zh-cn/library/09479473.aspx),「類或結構可以轉換爲和/或從其他類或結構或基本類型轉換。相反,使用[casts](http://msdn.microsoft.com/zh-cn/library/ms173105.aspx):「引用類型之間的轉換操作不會更改基礎對象的運行時類型;它只會更改用作該對象引用的值的類型。有關更多信息,請參閱[多態](http://msdn.microsoft.com/zh-cn/library/ms173152.aspx)。「 –