• ベストアンサー

オブジェクトに値を保持させるにはプロパティに追加ですか?

あんらいぷ ぜろいち(@Unripe01)の回答

  • ベストアンサー
回答No.4

ううん・・・ 参照渡しの値渡しという言葉の意味が良く分かりません・・・ すいません。 内部クラスをプロパティに持つクラスを 値渡ししたい場合は、 その内部のクラスを自力でコピーしないとだめです。 所感で申し訳ございませんが、参照型、値型、参照渡し、値渡しがどういったものがきちんと掴めていないまま クラスのプロパティのやり取りを行おうとしているように感じます。 少し学習の順序が違うのではないでしょうか? 確かに販売されているVB.netの書籍には、分かりやすい本はいくつかあります。 しかしそのいずれも、「オブジェクトのコピー」や「参照をコピーします」等といったキーワードが多数出てきます。 そしてそのキーワードの「本当の意味」が分からないままその本を熟読しても、「自分なりの解釈」で納得してしまうので、読み進めていくうちに「?」がいっぱいでてきて行き詰ってしまうのです。 何か必要にせまられてVB.netを選択しているのでしょうか? 時間的に余裕があり、「プログラムの勉強」をテーマとしているのならば、CやC++を基礎からやるのがお勧めです。 なぜなら、プログラミングの基礎が「本当の意味」で身につくからです。 VB.NETの開発をVisual Studioでやっていると思いますが、これは 「あまりにも便利すぎる」開発環境であると私は思っています。 VB.netは開発が楽ですし、あまりプログラムの内容を意識しなくても 「なんとなく」動く物ができてしまいます。 だから、rescue98さんのやろうとしているような、オブジェクトの概念必要な「オブジェクトのやり取り」や「プロパティ」の実装のところで躓いてしまうのです。 まずは、オブジェクトとはなにか?値型とは何か?参照とはなにか? という概念自体をしっかりと身に着ける必要があるのではないでしょうか? CやC++は、メモリの扱いや参照、値型などの知識がないと まともに動く物が作れません。 そういった意味で、VB.netを選択するのは危険だと思います。 CやC++を勉強しようとしたとき、 あまりにも「何を」していいのか分からず、聞く人もいないので、 簡単に勉強を始めることができる.NET関連の本を手に取ってしまうことは良くあります。 かといって、.NETが内部でどういう動きをしているのか? を理解し、きちんと設計ができるようになるまでの時間は、 C++を知っている人とそうでない人との違いは雲泥の差があります。 rescue98さんが最初に立てた 「オブジェクトに値を保持させるにはプロパティに追加ですか?」 という質問から相当ずれてきてしまっているので、 一旦〆られて、 別途 「参照型、値型の概念を身に付けるお勧めの方法は?」などのトピックを新しく作られてみてはどうでしょうか? 老婆心からいろいろと記述してしまい申し訳ございません。

rescue98
質問者

お礼

ありがとうございます。 Cは読みました。あのC言語を作った人の「プログラミング言語C」という本を読みました。 JAVAもEclipseにVisual Editorを入れてテーブルデータモデルを適用した表を作ってみました。 CはGUIがむずい。 JAVAはいろいろ別の仕組みを導入していかないと開発できない。 JUnitなど。 あとJAVAは継続した一環した開発が出来にくい環境だと判断しました。 そこでC#かVBかとなったわけですが、Visual C#かVisual BasicならVBを選ぶでしょう。 >VB.NETの開発をVisual Studioでやっていると思いますが、これは「あまりにも便利すぎる」開発環境であると私は思っています。 VBは簡単。誰でも出来る。 VBが出来るというとみんな口を揃えてそう言います。 ・・・ならなぜ簡単なVBで開発しないの?と思ってしまいます。 今は勉強中なので基礎がわかってませんが、一通り本を読んで、VBを習得すると決めました。 ということで、本を読み進めたいと思います。 またよろしくお願いしますmm

関連するQ&A

  • VBAのオブジェクトの値を保持しておくには

    ExcelのVBAにおいて、Deleteメソッドを使用して、 オブジェクトを削除する場合に、削除前に保持データを丸々待避させる よい方法はないでしょうか。 例)グラフタイトルのフォントスタイルを書き戻す。 1. ActiveChart.ChartTitle.Fontの内容を待避させる。 2. Deleteでタイトルを消す。 ActiveChart.ChartTitle.Delete 3. 間に種々処理を行う。 4. 新しいタイトルをつける。 ActiveChart.HasTitle = True ActiveChart.ChartTitle.Characters.Text = "foo" 5. ActiveChart.ChartTitle.Fontの内容を新しいタイトルに適用する。 プロパティーを列挙して変数に格納する方法を試したましたが、 プロパティーの数だけコードを書かなければならないので断念しました。 通常の変数であれば、 1. 規定値をセット(A=1) 2. 退避用の変数にAを保持させる(B=A) 3. Aに対して操作を行う 4. 待避した値をAに書き戻す(A=B) というようなことができるのですが。 オブジェクトにSet等を試しましたが、Setを使ってオブジェクトを入力した場合、 もとオブジェクトの変化に対して動的に値が変化するため、待避できませんでした。 どなたか、わかる方がいらっしゃいましたら、よろしくお願いいたします。 使用環境 WindowsXP SP2 Excel 2002 SP3

  • ユーザーコントロールのプロパティの値の保持

    ユーザーコントロールを作成して、使用しているのですが、独自のプロパティを作成し、実際に配置した複数のコントロールで、各々値を設定しても、プロジェクトを一度閉じてしまうと、その他プロパティの値が保持されません。 何か基本的なことを見落としているような気がするのですが、行き詰ってしまいました。 解る方いらっしゃいましたら、アドバイスお願いいたします。

  • VBAでオブジェクトのプロパティの値を変えたい

    エクセル2010のマクロの話なのですが、 添付画像にある、オブジェクトの「Value」というプロパティーの値を変更するための文法がわかりません。  PsyBcLbll.Value=13342353654 という感じで書いているんですが, たしか、 「変数が宣言されていない」 とかいうエラーが出てうまくいきませんでした。 一体、どう書けばいいんでしょうか?

  • オブジェクトやプロパティ、メソッドに付いて

    今、JavaScriptを覚えようとしてるのですが、オブジェクトから訳が分からなくなってきました。 ゲームに例えたら、自機がオブジェクトで、プロパティが自機のステータスで、 メソッドがいろいろな動作をさせる関数って感じでいいんでしょうか? それと、オブジェクトは下のようにメソッドやパラメータを使用しますが、 パラメータ=="値" って感じなのでしょうか?? オブジェクト名.メソッド名(パラメータ); オブジェクト名.プロパティ名="値"; よろしくご指導お願いします。

  • 【ExcelVBA】シートのCodeNameプロパティからオブジェクトを取得する方法

    いつも勉強させていただいてます。 業務でExcelVBAを使用していますが、ワークシートのCodeNameプロパティ値からワークシートオブジェクトを取得する方法はありますでしょうか。 以下、詳細です。 ・環境:Excel2003 ・概要    ワークシートのオブジェクト名:"shtFormat"    シート名:"フォーマット"  ガントチャートを作成するVBAなのですが、上記のシートをコピーして、実際に処理に使用するシートを作成します。  作成後も、ユーザフォームや別のデータ操作用ワークシートのイベントから操作するため、コピーしたシートを特定する情報を内部で保持しようと考えています。  そこで、CodeNameプロパティ値を保持しようと考えておりますが、CodeNameプロパティ値(文字列)からワークシート型のオブジェクトを取得する方法が分かりません。 ※ Nameプロパティはシート名を変更した際に使用できなくなり、断念しました。 ※Indexプロパティはシートの並び順によって値が変わるため、断念しました。 以上です。 宜しくお願い致します。

  • 既存オブジェクトに対するプロパティの追加

    既存オブジェクトに対してプロパティを追加したいと思っています。 具体的には(後述しますが)ファイル・フォルダオブジェクトに対してです。 (1)自分で作ったオブジェクトの場合 var huga = {}; huga.hoge = "123"; こうするだけで「hoge」プロパティを追加できますよね。 (2)一般的なオブジェクトの場合 Object.prototype.hoge = "123"; とすれば「hoge」プロパティを追加できますよね。 ここまでは知っていました。で、それを踏まえて同じように追加しようと、(1)(2)ともにためしてみたのですがうまくいきませんでした…。 文末のコードでは「item」の配列と、「newName」の配列を別に用意し処理しています。ただ、オブジェクトの意味合いからして、各独立に配列を用意するのはダサすぎます。で、item自体に「newName」プロパティを追加しようと思ったのですがこれがうまくいきませんでした。 ◎質問 ・この「item」オブジェクトにプロパティを追加することは出来るか ・出来ないのならなぜ出来ないのか。(拡張不可属性とかあるの?) ・出来るのならその方法 ※htaアプリなので、IEで動けばOKです。 以上、よろしくお願いします。 <html> <body> <input type="button" onclick="ファイル一覧取得()" value="ファイル一覧取得"> <div id="files"></div> <script> var folderItemsArray = []; var newFileNamesArray = []; // (2)で出来なかった例 // Object.prototype.newName = "123"; // FolderItem.prototype.newName = "123"; // Folder.prototype.newName = "123"; // Item.prototype.newName = "123"; function ファイル一覧取得() { folderItemsArray = []; newFileNamesArray = []; var FOLDER_PATH = "C:\\WINDOWS"; // ★ファイル・フォルダの一覧取得 var shell = new ActiveXObject("Shell.Application"); var folderItems = shell.NameSpace(FOLDER_PATH).Items(); var regOpt = "i"; for (var i = 0; i < folderItems.Count; i++) { // ↓このオブジェクトに「newName」を追加したい var item = folderItems.Item(i); if (!item.IsFolder) { newFileNamesArray.push("…"); // ↑別配列を操作している辺りがダサい // ↓本当はこんな感じにしたい。(1)で出来なかった例 // item.newName = "…"; folderItemsArray.push(item); } } 一覧表示(); } /** * ファイル一覧表示 */ function 一覧表示() { var body = ''; for (i = 0; i < folderItemsArray.length; i++) { var item = folderItemsArray[i]; body += "<tr>"; body += "<td>" + item.Size; body += "<td>" + item.Name; body += "<td>" + newFileNamesArray[i]; // ↑別配列を操作している辺りがダサい // ↓本当はこんな感じにしたい // tbodyStr += "<td>" + item.newName; } var table = '<table border="1" cellspacing="0">'; table += body; table += "</table>"; document.getElementById("files").innerHTML = table; } </script> </body> </html>

  • なぜiは変数の値が保持されるのに、wは保持されない

    なぜiは変数の値が保持されるのに、wは保持されないのでしょうか? Sub test() Dim w As Worksheet Dim i As Long i = 1 For Each w In Worksheets i = i + 1 Next MsgBox i MsgBox w.Name End Sub -------------------------------------- を行うと、 MsgBox i は表示されるのに、 MsgBox w.Name は、 「オブジェクト変数または With ブロック変数が設定されていません。」になります。 wはオブジェクト変数だから、 For Each ステートメントを抜けると値が破棄されてしまうのでしょうか? でもvbaのヘルプの 「For Each...Next ステートメントの使い方」 を見ても 「ステートメントを抜けるとオブジェクト変数なら値が破棄されます」 と記載されていません。

  • (VBA)ブックを開いている間、常に値を保持したい

    お世話になります。holmonと申します。 Excelブックを開いている間、値を常に保持しておきたいのですが、方法はありますか? 具体的にやりたいこと↓ 1.WorkBook_Openにてオブジェクト取得 2.上記を保持 2.ユーザーがExcel操作 3.ユーザーがExcel上のボタンを押す 4.イベント実行 4.のタイミングで、1.で取得した値を使いたいです。よろしくお願い致します。

  • ExcelVBAのオブジェクトとプロパティについて

    ネットだけで独学でVBAの勉強をしています。大雑把ですがオブジェクトとプロパティの認識はこんなものでよろしいのでしょうか。 オブジェクト=モノ(色々なものが集合して出来たモノ) プロパティ=モノが持っている動詞(例えば人間がオブジェクトとするなら、手を上げるなど、動作を言う)

  • 「戻る」ボタンで値の保持

    PHPやCGIなどで同じファイルにデータをポストした後に、ブラウザの「戻る」ボタンで戻ったときに「ページの有効期限切れ」になってしまうのですが、回避する方法はないでしょうか。 元のページとフィールドに入れた値を保持することはできないでしょうか。 他のファイルからポストしない限り値の保持は難しいのでしょうか。

    • 締切済み
    • PHP