2011-05-20 7 views
0

私は、同じ名前の区切り単位で型を持っていますが、私は文字列に単位名を持っています。私はこのユニットの特定のタイプにアクセスする必要があります。それ、どうやったら出来るの?Delphiで文字列名しか持たないユニット(実行時)を参照する方法は?

例:

unit Unit1 

type 
    TFooType = (
     bar1, 
     bar2 
    ); 

そして、私は別のユニット

unit Unit2 

type 
    TFooType = (
     foo1, 
     foo2, 
     foo3 
    );  

そして、どこかで私のコードでを持って、私はその中の値「Unit1は」で文字列変数「UNITNAME」を持っているし、私はUnit1の "TFooType"型に変数でアクセスしたいと思います。

私は私の悪い英語のため申し訳ありません

デルファイ2007を使用しています。

ありがとうございます。

+0

これを行うには、UNITS以外のクラスを使用する必要があります。オブジェクト指向プログラミングについて学んでください。ユニットはこのように操作することはできません。クラスと識別子(クラス名または任意の文字列)を登録し、文字列からClass参照へのクイックルックアップを簡単に実行できます。次に、クラスのインスタンスをインスタンス化できます。あるいは、delphiのインターフェイスとIoC(コントロールの反転)コンテナパターンを使用することもできます。 –

答えて

0

あなたができることは、if name='Unit1' then T := Unit1.TFooなどのようになりますが、とにかくTで何ができますか?異なる単位の列挙型は異なるので、Tで何かできると想像するのは難しいです。実際にはどのように定義するとT?私が想像できる唯一のことは、タイプ情報を返すことですが、今私の想像力を荒らしています!

+0

RTTIはこれとは関係ありません。 Robの回答を参照してください.2つのタイプはまったく異なる(互換性のない)タイプです。あなたはどれが使用されるのかを事前に知っておかなければならないので、適切なTFooType変数(例えば、 'var FT1:Unit1.TFooType; FT2:Unit2.TFooType;')を宣言することができます。 –

+0

@Ken yeah私は、私が話していたことをサポートすることができるのはクラスだけであるという事実をつぶしてしまう前に、そのビットを書きました。 –

+0

NP。あなたの元の答えの最初の文のためにダウンボトムしませんでした。 :) –

11

実行時に含める単位を選択することはできません。単位はコンパイル時の概念です。

さらに、同じ基本名を使用しているにもかかわらず、2つのタイプは完全に異なるタイプです。あなたのコードの他の部分では、タイプがTFooTypeの変数を持つことはできず、それらのユニットの両方から値を割り当てるかどうかは自由に決めることができます。変数には、の値と型の値のみを格納できます。

あなたは実際の仕事を達成するために他の方法を考えなければなりません。あなたの本当の仕事が何であるかを説明する新しい質問を投稿してください。

1

@Hrukai、ちょうどレゴのように、できることはたくさんありますが、何かがそのように使われるようには設計されていませんでした。

私の目標は、タイプにアクセスすることです。開始点は変数名です。変数をクラス(OOP)として実装していれば、簡単にObj.ClassNameを使ってその型を見つけることができました...しかし、実装のためにクラスを選択した場合、(変数から型にアクセスする)最初に起きたことはありません。

新しいパターンを作成し、その代わりにクラスの威力を利用するように抵抗します。 http://www.delphibasics.co.uk/Article.asp?Name=OOExample

関連する問題