2013-10-30 38 views
0

爲什麼我不能將基類投射到派生類?另外,編譯器爲什麼不抓住這個?如何將基類投射到派生類

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Parent p = new Parent(); 
      Child c = (Child)p; 

     } 
    } 

    class Parent 
    { 
     public string Data { get; set; } 
    } 

    class Child : Parent 
    { 
     public string OtherDate { get; set; } 
    } 
} 
+2

假裝它的工作原理。 'c.OtherDate'做什麼? – Blorgbeard

回答

0

pParent一個實例,所以你不能告訴運行時它解釋爲一個。

編譯器不抓住它,因爲這樣的代碼

Parent p = new Child(); 
Child c = (Child)p; 

和編譯器不做抓住它需要的靜態代碼分析。不檢查它的原因是:

  • 這是耗時

  • 它只能捕捉一些錯誤的實例。