[英]How is c# reflection a runtime event?
每個定義都說 C# 反射用於在運行時確定對象的類型。 對象的類型可以在運行時改變嗎? 任何人都可以請給我一個例子。
當然,實體可以在運行時更改其運行時類型。 它只是不能改變它的編譯類型。 這是因為 c# 是一種類型安全語言(一旦是給定類型,就永遠是給定類型)。
假設您有 3 個類 - 一個是抽象類Animal
和兩個派生自它的類,例如Cat
和Dog
。 然后
Animal animal = new Dog(); //compile time type is Animal runtime type is Dog
Console.WriteLine(animal.GetType().Name); // Dog
...
animal = new Cat(); // compile time type is still Animal (c# is Type safe)
// but runtime type just changed to Cat;
Console.WriteLine(animal.GetType().Name); // Cat
請注意,在您對 Animal 進行編程時,動物不會“只是一個對象”。 屬於(編譯)類型的 Animal 值得一提 - bool IsAlive
屬性、 Breath()
方法等等。 但是當您編寫代碼(即編譯時)時,您的“動物”實例不會有Tail
(因為並非每個動物都有尾巴)。 您只能訪問(例如使用智能感知)您確定它擁有的東西(僅限動物的東西)。 這仍然說了很多,但不如它的具體子類那么多。 這是一件非常普遍的事情,這是一件好事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.