簡體   English   中英

c# 反射如何成為運行時事件?

[英]How is c# reflection a runtime event?

每個定義都說 C# 反射用於在運行時確定對象的類型。 對象的類型可以在運行時改變嗎? 任何人都可以請給我一個例子。

當然,實體可以在運行時更改其運行時類型。 它只是不能改變它的編譯類型。 這是因為 c# 是一種類型安全語言(一旦是給定類型,就永遠是給定類型)。

假設您有 3 個類 - 一個是抽象類Animal和兩個派生自它的類,例如CatDog 然后

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.

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