2011-12-28 6 views
-4

私はタイプキャストに関する基本的な質問があります。C#の型キャストはここで発生しますか?

class A { } 
class B : A { } 

B b = new B(); 
A a = (A)b; 

タイプキャスティングが発生するかどうかは?

interface IA 
    { 
     void process(); 
    } 

    class B : IA 
    { 
     #region IA Members 

     void IA.process() 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
     public void process() { } 
    } 

    B b = new B(); 
    b.process(); 
    ((IA)b).process(); 

タイプキャスティングが発生するかどうかは?

答えて

1

あなたにお勧めします。したがって、どちらの場合でも型キャストが発生します。明示的キャスティングが削除された場合、最初の場合は暗黙のキャストが発生し、2番目の場合はb.process()と同じようにキャストが発生しません。

+0

Thanx Aditya、コンパイラがILに適切な型キャスティングコードを生成するかどうかを簡単に教えてください。 – LokiDil

+0

ダウンキャスティングでは、参照のみが新しい変数に格納されます。しかしアップキャスティングのために、クラスキャスト命令が生成される。また、第2の場合、生成される命令は、任意のキャスト命令の代わりにIA.processを直接呼び出すことである。 – Aditya

+0

私が明確に理解できるようにするThanx Aditya – LokiDil

0

私はあなたがどちらの場合も、(A)Bのように明示的なキャストを使用しているクラスBにクラスAをキャストするクラスのコンバータを作成

+0

Thanx Dmity、私はコンパイラがこれらの機会にどのように動作するかを知りたいと思います。 – LokiDil

+0

申し訳ありませんが、わかりません。しかし、私が言ったように、最善の解決策です。ええ、コードを書くのに時間が必要ですが、クラスの各プロパティはあなたのコントロール下にあります。 –

関連する問題