アカウント名:
パスワード:
言語に対してWTFなのか、コード自体に対してWTFなのか分からんのじゃないの。
VC++(MFC)で、有る画面と継承された別の画面で、修正前、チェックは親画面側にしかロジックが無く、
チェック追加時に、子側画面にも親側のまねをして、チェック関数を追加し、そのデリゲートに差分ロジックのみを書いたら、
子側画面で追加した以外のチェックが働かなくなってひどい事になった事が有ります。
何で、Shadowsと書かなくてもシャドウしてしまうのか不思議でなりません。これこそまさにfxxxxxxxxxxxxxxkの典型だと思います。単なる文追加が、それ以上の意味を持ってしまうなんて、吃驚仰天です。
オーバーライドってそういうものだと思うんだけど。C++じゃなくとも、.Net以外のOOD言語って基本オーバーライドするものだよ。他にもあるかは知らないけど、OverridesかShadowsかを選べる.Netのほうがむしろ異端じゃないかな?
ポリモーフィズムってのを勉強するといいよ。素人がオブジェクト志向系言語に近づくとこういう痛い目に遇うって言う典型だね。
確かに最初何いってるのって感じだった要するに知らないんだと分かるのに時間がかかった
んー・・・.Net環境に触ることが無いからググル先生に聞いてみたんだけど。ShadowsってC++で言うところの非virtualメソッドでOverridesがvirtualメソッドだよね?
Shadowsに勝手になってるって批判してる元コメントがどういう挙動を期待してたのかすらわからないんだけど・・・
基底でvirtualかどうか(ShwdowsかOverrides)が決まってて派生を書くときに指定が無いから解りづらいって批判ならわからんでもない。
元の発言者は
子画面で作ったチェック関数は子画面で追加した部分用のチェック関数で親画面から継承した部分は親画面のチェック関数が動いてくれることを期待していた。ところが、実際には子画面用のチェック処理しか動いてくれなかった。
ってことを言いたかったんじゃないかと。
で、この場合って非virtualかvirtualかに関係なく、親画面の関数の処理を行わせたかったらそれを何らかの形で明示的に呼んでやる必要があったのに呼んでなかったってだけじゃないかと。例:子画面のチェック関数のどこかで親画面のチェック関数を呼ぶ
constructorのように継承しただけで勝手に呼ばれる関数もあるけどふつうはそうじゃないでしょ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人はmoriwaka -- Anonymous Coward
言語? (スコア:0)
言語に対してWTFなのか、コード自体に対してWTFなのか分からんのじゃないの。
Re: (スコア:1)
VC++(MFC)で、有る画面と継承された別の画面で、修正前、チェックは親画面側にしかロジックが無く、
チェック追加時に、子側画面にも親側のまねをして、チェック関数を追加し、そのデリゲートに差分ロジック
のみを書いたら、
子側画面で追加した以外のチェックが働かなくなってひどい事になった事が有ります。
何で、Shadowsと書かなくてもシャドウしてしまうのか不思議でなりません。これこそまさにfxxxxxxxxxxxxxxk
の典型だと思います。単なる文追加が、それ以上の意味を持ってしまうなんて、吃驚仰天です。
Re:言語? (スコア:3, すばらしい洞察)
オーバーライドってそういうものだと思うんだけど。
C++じゃなくとも、.Net以外のOOD言語って基本オーバーライドするものだよ。
他にもあるかは知らないけど、OverridesかShadowsかを選べる.Netのほうがむしろ異端じゃないかな?
ポリモーフィズムってのを勉強するといいよ。
素人がオブジェクト志向系言語に近づくとこういう痛い目に遇うって言う典型だね。
Re: (スコア:0)
確かに最初何いってるのって感じだった
要するに知らないんだと分かるのに時間がかかった
Re: (スコア:0)
んー・・・
.Net環境に触ることが無いからググル先生に聞いてみたんだけど。
ShadowsってC++で言うところの非virtualメソッドで
Overridesがvirtualメソッドだよね?
Shadowsに勝手になってるって批判してる元コメントがどういう挙動を期待してたのかすらわからないんだけど・・・
基底でvirtualかどうか(ShwdowsかOverrides)が決まってて派生を書くときに指定が無いから解りづらいって批判ならわからんでもない。
Re: (スコア:0)
どういう挙動を期待していたのかわからないのは同意ですが。ていうかわかってて上書きしたようにしか見えないので何とも。
# 関係ないけど C#の場合はShadowsじゃなくてnewというキーワードをつけます。つけないと警告(親のメソッドを意図して隠したいならnewつけろ)。
Re: (スコア:0)
元の発言者は
子画面で作ったチェック関数は子画面で追加した部分用のチェック関数で
親画面から継承した部分は親画面のチェック関数が動いてくれることを期待していた。
ところが、実際には子画面用のチェック処理しか動いてくれなかった。
ってことを言いたかったんじゃないかと。
で、この場合って非virtualかvirtualかに関係なく、親画面の関数の処理を行わせたかったらそれを何らかの形で
明示的に呼んでやる必要があったのに呼んでなかったってだけじゃないかと。
例:子画面のチェック関数のどこかで親画面のチェック関数を呼ぶ
constructorのように継承しただけで勝手に呼ばれる関数もあるけどふつうはそうじゃないでしょ