2012-03-27 19 views
0

私は "モール"についてシミュレーションをしています。私は同じ人物の性格に対応する同じレベルのクラスをたくさん持っています。 たとえば、私は同じレベルのクラス、クラウン、泥棒、暗殺者、物質師などを持っています そしてClientsという父のクラス。クライアントクラスでは、私は食べたり、歩いたりするためのいくつかのメソッドを持っています。それぞれの特定のクラスには特定のメソッドがあり、泥棒は盗んだり、暗殺者を殺したりします。 私はどのようにすべての "クライアント"特定の方法ごとにキャストしますか?クラスのやりとり

+0

私はすべてのクライアントをクライアントリストに入れようとしていましたが、うまくいかないため、すべての特定の方法を使用できます。 – waclock

+1

これは、たとえば、 "SpecialAction"というクライアントインターフェイスでより一般的な呼び出しにすることができます。 –

+0

Uは間違いなくインターフェイスでなければなりません。例えば、IPeopleやIArchetypeのようなものをインタフェースIMovementProviderなどからいくつかのメソッドで使用します。 –

答えて

0

おそらくあなたは、このような何かを行う必要があります。一般的に、この問題の解決策は、usrが応答したときにダウンキャストすることです。

0

これにはランタイムキャストが必要です。一覧にはList<Client>と入力し、リストにアクセスするときにキャストを実行できます。しかしながら、これは特に頑丈な設計ではない。私はあなたのクライアントが実行時にキャストする必要がある十分に異なる場合、なぜあなたが継承を全く使用しているのか疑問に思います。しかし、一部の限られた状況で

public abstract class Client 
{ 
    public void Eat() { /* some implementation */ } 
    public void Walk() { /* some implementation */ } 
    public abstract void TypeSpecificAction(); 
} 

public class Thief 
{ 
    public overeride void TypeSpecificAction() { Steal(); } 
    public void Steal() { /* some implementation */ } 
} 

public class Assassin 
{ 
    public overeride void TypeSpecificAction() { Assassinate(); } 
    public void Assassinate() { /* some implementation */ } 
} 

これだけ作品:

関連する問題