ここから本文です

オブジェクト指向がよくわからないのですが、インスタンスの値の書き換えはどうや...

zwe********さん

2011/5/2710:41:52

オブジェクト指向がよくわからないのですが、インスタンスの値の書き換えはどうやるのですか?

入門でC#をやっているのですが、手続き型言語に慣れすぎていてオブジェクトの操作方法がいまいち分かりません

Regex regex = new Regex ("hoge");
と記述すればregexは正規表現としての"hoge"を扱えるのは理解できるのですが
では、"hoge"を新たに"piyo"にしたい場合はどうすればよいのでしょうか?

Regex regex = new Regex ("piyo");
とする他にないのでしょうか?
新しく作るわけでもないのにnew演算子を使うのは、なんだか不気味にしか見えないのですが…

一例 // HTMLソースからhogeを抜粋し、更にhogeの中のpiyoを除去し、変数valに追記していく
Regex regex = new Regex ("hoge");
MatchCollection anchorMatches = regex.Matches (foo);
Regex regex = new Regex ("piyo");
string val = "";
foreach (Match mWords in anchorMatches) {
val = val + regex.Replace (mWords.Groups[1].Value)."\n";
}

閲覧数:
297
回答数:
1

違反報告

ベストアンサーに選ばれた回答

uni********さん

2011/5/2710:52:45

クラスによって、インスタンスの内容の書き換えができるものとできないものがあります。できないものはたんにそのクラスの設計者が「どうせ作っても誰も使わないだろう」と思ってそういう set 用のプロパティーや setter メソッドを付けなかったにすぎません。
Regex クラスも、そのようにたまたま設計者が書き換え機能を提供しなかっただけでしょう。

したがってインスタンスの内容を書き換えたければ、そのインスタンスは捨ててしまい、別のインスタンスを new すれば良いです。クラスの設計者もどうせ、正規表現パターン("hoge")を "piyo" にされても、正規表現パターンのコンパイルのし直しになるので new とほとんど同じなので、書き換え用の機能を提供しなかっただけなので、使う人も毎回 new してもいっこうに構いません。

なお、提示されたコードを見る限り、たとえ Regex クラスが書き換え機能を提供していたとしても、それを使わずに2つのインスタンスを使うほうが自然だと思います。ひとつのインスタンスを異なる用途に兼用するのは複雑になるだけです。

質問した人からのコメント

2011/5/27 11:15:01

うーん。中々気持ち悪い言語ですねぇ…。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる