- PR -

メソッドの呼出元インスタンスの取得方法がわかりません

投稿者投稿内容
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-04-27 17:48
引用:

ロニーさんの書き込み (2006-04-27 17:34) より:
みなさまのご指摘の通り、現仕様を変更するのが最善の方法だと思います。
ですが、この修正により発生するコストを考慮すると、そう安易に諦めて
仕様変更とするわけにはいかないのです。


仕様変更した方がローコスト、ということもあると思います。
だいたい、開発はしのげても、運用はどうするんです?
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2006-04-27 17:59
専門外なのでてきとーなこと言って申し訳ないですが……

TestClassに引数ありのコンストラクタを作って呼び出し元のインスタンスなり必要なデータを渡すとか、Form aで直接newせずにファクトリメソッドを用意し、同じインターフェイスを持つ行いたい処理ごとのTestClassを作るとかって無理なんでしょうか?
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-04-27 18:08
引用:

TestClassに引数ありのコンストラクタを作って呼び出し元のインスタンスなり必要なデータを渡すとか、Form aで直接newせずにファクトリメソッドを用意し、同じインターフェイスを持つ行いたい処理ごとのTestClassを作るとかって無理なんでしょうか?


話の流れからして、呼び出し元の変更も禁止と解釈していますが。。。
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2006-04-27 19:00
引用:

まどかさんの書き込み (2006-04-27 18:08) より:
話の流れからして、呼び出し元の変更も禁止と解釈していますが。。。



別に禁止しているのではなくて、修正コストを抑えたいということですよね?

正直なところ、普通は引数を追加するのが一番コストがかからないし、私の挙げた方法はかえってコストがかかると思います。
ただ、実際の作り見たら案外うまくいったりしないかな、という超希望的観測で書いてみました。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-04-27 19:08
まいるどきゃっとさんの方法で得られるのは、
「インスタンスの生成者」ですよね。
「メソッドの呼び出し元」とは違うんでは?
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2006-04-27 19:44
引用:

Edossonさんの書き込み (2006-04-27 19:08) より:
まいるどきゃっとさんの方法で得られるのは、
「インスタンスの生成者」ですよね。
「メソッドの呼び出し元」とは違うんでは?



「メソッドの呼び出し元が保持している値によってTestClassのTestClassMethodの挙動を変えたいが、なるべく修正コストを抑えたい」ってのがロニーさんの要望かなと思ってます。

サンプル見ると「メソッドの呼び出し元=インスタンスの生成者」っぽいからインスタンスの生成者を渡せば事がたりるかな?とか、TestClassのインスタンスの生成時に挙動を決めて大丈夫ならファクトリメソッド使えないかな?なんて考えてみました。

# 何となくの思いつきで書いてみましたが、我ながらつっ込みどころ満載ですね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-27 22:28
 外部発注しているところで、外部費用が発生するから。。。ってところかな。


 教えていないところから、値を覗き見られたり、書き換えられたら、と〜〜〜〜〜ってもリスキーだと思いませんか?

 例えば発注時。「この値段、ちょっと高いなぁ。そうだ、メモリを書き換えてやれ!ほうら、安くなった(笑)」なんてことをしようとしているわけですね。
# いや、ゲームのチートプログラムなんか、そういうことやってますけどね
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2006-04-28 10:56
TestClassはインターフェースを変えられないんですよね。
もしTestClassMethod()の引数だけが変えられないのであれば、TestClassをnewした後にプロパティで「これからTestClassMethod()を呼ぶフォーム」を設定してから呼ぶとか。
TestClass全部のインターフェースが変更不可なら、MainFormにstaticなフィールドを用意して「これからTestClassMethod()を呼ぶフォーム」を保持しておくというのはどうでしょうか。
で、TestClassMethod()の中でそのフィールドから自分を呼び出したフォームを取得する、と。

技術屋ならこんなやりかたはなるべく避けたいと思うでしょうが。
"不吉なにおい"がプンプンしますよね。真っ先にリファクタリングの対象になるでしょう。

何やら大人の事情がありそうなので、とりあえず提案してみました。

スキルアップ/キャリアアップ(JOB@IT)