[.netプロパティ(副メンバー変数)にアクセスする必要があるという意味を削除するために編集]
.net(具体的にはC#でコード化されたWPF)を使用してデザインパターンを作成しようとしています。これにより、クラスのインスタンス(基本クラスから派生)に、メソッド呼び出しで列挙値を渡すことでアクセスできるメンバー変数が含まれます。 。たとえばmyObject.GetValueOf(dimensionFields.Latitude)
、myObjectが保持する「Latitude」値を返します。明らかに、目的はGetValueOf([some enum variable])
、実行時に、列挙によって定義されたいくつかのフィールド値のいずれかにアクセスするために使用することです。また、多くの(100,000をはるかに超える可能性がある)オブジェクトが(OpenGLを介して)ディスプレイに描画されるときにこれらの値にアクセスするため、かなり高いパフォーマンスが必要です。
パフォーマンス要件のため、リフレクションを使用することには消極的です。それは合理的な消極的ですか?
私は解決策を考えていますが、私の質問は「彼らはより良い方法ですか、それとも簡単な方法ですか?」です。
現在の解決策は次のとおりです。アクセスするメンバー変数のタイプごとに列挙を作成します(つまり、double用に1つ、integer用に1つ、strings用に1つ、bool用に1つなど)。オブジェクトの基本クラスには、各タイプの変数(たとえばDictionary<FieldsForDoubles, double> m_doubleDict
)に対応する辞書があります。その基本クラスのGetValueOf([some enum value])
メソッドは、各タイプの列挙を受け入れ、適切なデータ型(たとえば、public double GetValueOf(FieldsForDoubles field)
)を返すようにオーバーロードされます。派生クラスは、便宜上実際のプロパティ(Latitude
プロパティなど)を追加できますが、これらのプロパティは適切なディクショナリにアクセスするだけです。
最後に、エクスカーションとして、列挙値ではなく文字列値で辞書にアクセスできるようにし、メソッドにジェネリックメソッド( )をGetValueOf
使用してアクセスさせ、特定の派生クラスが現在の列挙にない変数を保持できるようにします。しかし、非常によく似たパターンでアクセスできます(たとえば、このパターンを使用する任意の変数にアクセスするために使用できます)someEnumValue.ToString()
GetVaueOf<type>(string variableName)
GetValueOf<double>([some variable name])
誰もがこの方法に問題があると思います(たとえば、かなり短い辞書にアクセスするのはその費用ではありませんよね?)?これがどのように行われるかについて他に何か考えはありますか?
前もって感謝します。