2016-11-16 13 views
0

私の質問は: "classA"から呼び出されたときに "classA"内の特定のフィールドを検索する静的クラス "classB"に静的メソッド "meth1"を定義できますか?定義されているクラスではない)? 私はより良い説明しよう:私はこのような何かを実行する必要があります。静的メソッドの名前でオブジェクトを

public class classA 
{ 
    string someText; 
    int anInt; 
    bool trueOrFalse; 

    public classA() 
    { 
    ... 
    ... 
    var variable = classB.meth1("variableName"); 
    ... 
    ... 
    } 
} 

public static classB 
{ 
    public static object meth1(string name) 
    { 
    ... 
    ... //use "name" to find the variable with that name in the class from which "meth1" is called. 
    ... 
    } 
} 

それ私は、ラインによって.txtファイルに含まれる変数の「最後のラン値」のバックアップ、書かれた行を読み取るために持っているので、 "変数名=値"。 私は.txtを読んで、 "変数名"; "値"を含むハッシュテーブル "backupHashtable"を作成し、文字列 "変数名"で変数を検索し、それらを "値"にリセットします。 あなたの誰かが私が聞いているより良い手順を知っているなら。多分辞書の使用ですか?

ありがとうございました! [OK]を

を更新

、今私は私が何をしたいのかを明確にアイデアを持っている:私は「ClassBの」クラスを実装したい、私のメインクラス「クラスA」から分離します。この新しいクラスでは、別のスレッドで実行される「meth1」メソッドを使用して、「classA」に属するいくつかの変数の状態を(たとえば)10秒ごとに保存します。私が保存しなければならない変数である "meth1"を伝えるために、これらの変数の名前を含むリストを使用したい( "string"という形式で、私は思ったが、それだけではないと思う) 。

私は別のスレッドでこれをやりたいのだろうかと疑問に思うなら、答えはこれです:私のアプリケーションは、複数のカメラからのライブストリーム画像のいくつかのオブジェクトの認識操作を実行し、補助的な操作はメインコードから実行速度を上げることが可能です。

今、おそらく、私が以前に言ったことはもっと分かりやすいでしょう。

+0

シリアライザを実装しようとしていますか?なぜ既存のものを使用しないのですか? – Maarten

+2

私は混乱しています - あなたはそれを呼び出すクラスにある値を返すために 'meth1'をなぜ必要としますか?どちらのクラスでも何をしようとしているのかを示すサンプルコードを提供できますか? –

+0

@Maartenありがとうございました。それは便利です。しかし、私が理解しているように、シリアライゼーションはアプリケーションの現在の状態を保存するためのツールに過ぎませんが、この場合でもさまざまなタイプの変数を1つのコンテナにまとめる必要があります。 – Andrea

答えて

1

はい、ただし、Aのインスタンスへの参照も渡す必要があります。次に、reflectionを使用してプロパティを取得または設定します。

public static void Meth1(object obj, string propertyName) 
{ 
    var prop = obj.GetType().GetProperty(propertyName); 
    var value = prop.GetValue(obj); 
    ... 
} 

私はクラスにテキストファイルから値を取得した場合、私は私が最初の辞書にそれらをロードして、すべてのプロパティを一つずつ設定したいと思います。 (おそらく、何百ものプロパティがない限り)。リフレクションを使用すると、テキストファイルにがないプロパティの名前が含まれている可能性があります。は外部から変更したいと考えています。

object value; 
if (dict.TryGetValue("someProperty", out value)) { a.SomeProperty = value; } 
関連する問題