2011-01-07 23 views
0

多形性について少し気をつけていましたが、それでも私は概念を完全に理解しているとは思えません。多型/型キャスティングの使用

オブジェクトが多くの形を取ることができるため、多型性を理解しています。だから、オブジェクトは一つのフォームになり、別のフォームになることができますか?

 
Mammal (base class) 
cat (subclass of mammal) 
supercat (subclass of cat) 
Cat newCat = new Cat(); 

今私は、この "多型" は、猫がsupercatになりたいですか?

SuperCat supCat = (SuperCat)newCat; 

キャスティングと同じではありませんか?いつキャスティングを使いたいですか?上記のコード行は有効ですか? newCatはSupercatに変換され、newCatにメモリ割り当てが増えますか?次にそれをsupCatにコピーしますか?

注 - 多態性はインターフェイスの使用ですか?

+0

申し訳ありませんがアイデアを得ることができる必要があり、多型のあなたの理解は大きく外れています。多態性は、異なるタイプがいくつかの動作を共有し、他の動作は異なります。 'Cat'を' SuperCat'に変換できるようにしたいのであれば、自分でコードを書く必要があります。 – mquander

答えて

3

だけコメント。

多型には2種類あります。

は時間の多型をコンパイルします。

あなたの多型の行動がコンパイル前に定義されている場所です。 これはメソッドオーバーロードなどで発生します。

public bool DoSomeThing(int myVal) 
{ 
    // some code here 
} 

public bool DoSomeThing(double myVal) 
{ 
    // some code here 
} 

ランタイム多型:

これはポリモーフィック動作は、実行時に起こるところです。 この例は、特定のインターフェイス(または共通基本クラス)を実装する型を受け入れるメソッドです。このインタフェースは、実行中のコードに応じて異なるタイプにすることができます。

戦士が銃を与えられている場合

public interface IWeapon 
{ 
    void Strike(); 
} 

public class Knife : IWeapon 
{ 
    public void Strike() 
    { 
    Console.WriteLine("Stab"); 
    } 
} 

public class Gun : IWeapon 
{ 
    public void Strike() 
    { 
    Console.WriteLine("Shoot"); 
    } 
} 

public class Warrior 
{ 
    public void Attack(IWeapon weapon) 
    { 
    weapon.Strike(); 
    } 
} 

今の攻撃からの出力がシュートだろうとナイフのためにそれが刺しだろう。

などの構文エラーがあるかもしれないので、私はこのコードをテストしていませんが、あなたは

+0

ありがとうございました。以前はインターフェースを使用していましたが、クラスを同じ動作にする以外に、なぜそれらを一緒にグループ化し、それらをファッションで使用するのかということは、本当に冷静で理にかなっています。ありがとう。 – RoR

0

これは "多型"ではありません SuperCatはCatですが、すべてのCatがSuperCatではありません。

0

多型は、SuperCatがSuperCat、Cat、およびMammalであることを意味します。これらの3つのいずれかとして扱うことができます。

ポリ - >多くの

射 - >マッピングまたは「タイプ」

1

多型を使用すると、基本型インタフェースを介してサブタイプのオブジェクトと対話場所です。例えば:

List<Cat> cats = new List<Cat>(); 
cats.Add(new Cat()); 
cats.Add(new SuperCat()); 

foreach (Cat cat in cats) 
{ 
    cat.Meow(); // Works whether cat refers to a Cat or SuperCat. 
       // If SuperCat has its own Meow implementation, that is called. 
} 
1

多型は、一種類の契約のいくつかの並べ替えを表現することができ、そして他のタイプのためにさまざまな方法でその契約(かクラスの継承を介して、またはしない)、自分の目的に応じてそれぞれを実装します。その契約を使用するコードは、どの実装が関与しているかを気にしてはならず、契約に従うだけである。

この投稿からご了承の上

Polymorphism - Define In Just Two Sentences