2016-11-22 15 views
0

私は、ゲームで生成されたすべての異なる単位のすべてのオブジェクトを含むリストを作成したいが、それらはすべて同じクラスではない。メインクラスのサブクラスであれば、それらはすべて助けになるでしょう。しかし、基本的な機能を備えたメインユニットクラスを持っています。そして、剣士、パイクマンなどのためにもっとたくさんのクラスを用意しています。それは可能ですか?C# - さまざまな種類のオブジェクトの一覧

+0

しかし、サブクラスの情報はないでしょうか? –

+0

もちろん、完全なオブジェクトを追加することもできます。あなたはそれを取得するときに、希望のオブジェクトにキャストする必要があります。 – NikxDa

+0

オブジェクトのリストのリストを作成することをお勧めします。すべてのオブジェクトをトラバースする必要がある場合、オーバヘッドは非常に小さくなります(メインリストのすべてのリストをトラバースしながら)。しかし、独自のリスト内の特別なオブジェクトタイプをトラバースすると、すべてのオブジェクトで1つの大きなリストをトラバースするよりもはるかに高速になります。 – crea7or

答えて

3

はい可能です。

ロブが彼のコメントで言ったように、あなたはList<SharedBaseClass>を作る必要があります。

var someList = new List<SharedBaseClass>(); 

あなたは正しいサブクラスにキャストバックする必要がありますリストの特定の要素と対話しようとしている。

// throws an exception if type wrong 
var someElement = (desiredSubClass) someList[someElementIndex]; 

// return null if type wrong 
var someElement = someList[someElementIndex] as desiredSubClass; 
+3

'var someElement = someList [index] as DesiredSubclass'を実行し、' someElement'をnullチェックしてください。また、 'someList.OfType ()'は、特定の派生型のすべての要素を取得します – KMoussa

+0

@KMoussaありがとう、私は私の答えを更新しました! – Slvrfn

1

Slvrfnのanwerは、正常に動作する必要があります。キャストが気に入らない場合、またはUnityでキャストするときにパフォーマンスが低下することが気になる場合は、サブクラスで変数を作成し、のthisキーワードで初期化することもできます。あなたはもうキャストする必要はありません

public class MySubClass : SecondBase 
{ 
    public FirstBase firstBase; 
    public SecondBase secondBase; 

    public MySubClass() 
    { 
     firstBase = this; 
     secondBase = this; 
    } 
} 

public class FirstBase 
{ 
    public int speed = 50; 
} 

public class SecondBase : FirstBase 
{ 
    public int live = 5; 
} 

そして、あなたのサブクラス:

は、あなたはあなたが継承する2つのクラスがあるとしましょう。 MySubClassの定義されたfirstBaseおよびsecondBase変数を使用できます。

List<MySubClass> subClass = new List<MySubClass>(); 
subClass.Add(new MySubClass()); 

FirstBase firstBase = subClass[0].firstBase; 
SecondBase secondBase = subClass[0].secondBase; 
+0

この問題は、基本的にユニット型の配列を持ちたいので、呼び出すことができ、それぞれのtoherのすべてのサブクラスではありません。 –

+0

あなたはあなたの質問でサブクラスだと言いました。 TBH、素晴らしい答えが必要な場合は、次回に質問にコードを入力してください。あなたが提供するサンプルは、あなたに何をしているかを伝えます。 – Programmer

関連する問題