Invalid Cast Exception

MSDN ÂüÁ¶:
ÀϺΠÂüÁ¶ Çü½Ä º¯È¯¿¡¼­´Â ÄÄÆÄÀÏ·¯°¡ ij½ºÆ®ÀÇ À¯È¿¼º ¿©ºÎ¸¦ È®ÀÎÇÏÁö ¸øÇÕ´Ï´Ù. µû¶ó¼­ ¿Ã¹Ù¸£°Ô ÄÄÆÄÀÏµÈ Ä³½ºÆ® ÀÛ¾÷ÀÌ ·±Å¸ÀÓ¿¡ ½ÇÆÐÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ ¿¹Á¦¿¡¼­ º¼ ¼ö ÀÖ´Â °Íó·³, ·±Å¸ÀÓ¿¡ ½ÇÆÐÇÏ´Â Çü½Ä ij½ºÆ®´Â InvalidCastExceptionÀ» throwÇÏ°Ô µË´Ï´Ù.

    class Animal
    {
        public void Eat() { Console.WriteLine("Eating."); }
        public override string ToString()
        {
            return "I am an animal.";
        }
    }
    class Reptile : Animal { }
    class Mammal : Animal { }
    class Sample
    {
        public void Test()
        {
            Run(new Mammal());
        }

        void Run(Animal a)
        {
            //Reptile r = (Reptile)a;
            Reptile r = a as Reptile;
            if (r != null)
            {
                Console.WriteLine("OK");
            }
        }
    }

Reptile r = (Reptile)a;
"InvalidCastExceptionÀÌ(°¡) 󸮵µÁö ¾Ê¾Ò½À´Ï´Ù." ¿¡·¯ ¹ß»ý

À§ÀÇ Ä³½ºÆÃÀ» ¾Æ·¡¿Í °°ÀÌ as¸¦ »ç¿ëÇϰųª IS ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ij½ºÆà Çϴ°ÍÀÌ ¾ÈÀüÇÏ´Ù.

Reptile r = a as Reptile;

ÂüÁ¶)
https://msdn.microsoft.com/ko-kr/library/ms173105.aspx
http://theburningmonk.com/2010/04/net-tips-using-as-vs-casting-in-csharp/
https://msdn.microsoft.com/ko-kr/library/cc488006.aspx