ユビキタス世界までの道の駅

アウトドア派のプログラミング奮闘記

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  130  : 記事  0  : コメント  1519  : トラックバック  8

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

姉妹ブログ

構造体とクラスにつづいて、関連することだと思いますが、

構造体とクラスは、値型と参照型で大きく分けることができます。(例外もあるでしょうが)

 

値型の特徴として、例えば、測角、測距を定義する場合、

  Structure AngleDistance

      Public a,s as Double

  End Structure

とするならば、

  Dim MyAngleDistance1 as AngleDistance

  Dim MyAngleDistance2 as AngleDistance

と変数を宣言する場合Newで呼び出さなくてもいいです。

また

  MyAngleDistance1.a = 90.1234

  MyAngleDistanve1.s = 10.123

と値を代入した後で

  MyAngleDistance2 = MyAngleDistance1

と1の構造体を代入

その後

  MyAngleDistance2.s = 20.234

と代入したとしても

 Lable1.Text = Stirng.Parse(MyAngleDistance2.s)

ラベルには10.123と表示されます。

 

逆に参照型のクラスで定義すると

  Class AngleSpan

      Public a,s as Double

  End Class

とすると、インスタンスを生成しないといけないので

  Dim MyAngleSpan1 as AngleSpan = New AngleSpan()

  Dim MyAngleSpan2 as AngleSpan

としておいて

  MyAngleSpan1.a = 90.1234

  MyAngleSpan1.s = 10.123

と代入、

  MyAngleSpan2 = MyAngleSpan1

と2に代入した後

 MyAngleSpan2.s = 20.234

と代入すると

  Lable1.Text = String.Parse(MyAngleSpan2.s)

は「20.234」という表示がされます。

また、参照型なので、代入元1の方も

  Lable2.Text = String.Parse(MyAngleSpan1.s)

と20.234となってしまいます。

 

構築していきたい対象が、StructureがいいのかClassがいいのかは、

データの特性を考えて判断していくことになると思いますので、

値型か参照型であるか慣れるまで慎重に使う方がいいですね^^

投稿日時 : 2007年7月24日 16:04

コメント

# re: 超初心者からの脱却(値型と参照型) 2007/07/24 16:20 黒龍
分けたほうがいいですがはじめのうちは全部クラスでもいいかなぁなんて思ったり。スタックのイメージも難しいしヒープも難しいし参照なんてなおのこと難しいので。

# re: 超初心者からの脱却(値型と参照型) 2007/07/24 16:36 Zee
まぁ初心者から脱却することがテーマなので、
混乱スル方は、スルーしてもらえたらいいと思います。

興味を持てば、難しいこともクリアになっていく掴みがほしかっただけなんで。

# re: 超初心者からの脱却(値型と参照型) 2007/07/24 17:29 まどか
次回はぜひ値渡しと参照渡しについてを!

#各所での値はどうなるか。
Dim p As New Point(1, 2)

Dim p2 As Point = GetP(p)

Private Function GetP(ByVal in_p As Point) AS Point
in_p.x = 345
Return in_p
End Function



# re: 超初心者からの脱却(値型と参照型) 2007/07/24 17:52 黒龍
あ、このあたりを学習するのは大賛成です。ただ、クラス設計する段階で最初は構造体は無くても困んないかなぁと。かなりクリアにならないとボクシング/アンボクシングの回避によるメリットやまーシャリングのデメリット回避が出来ないので。

内容自体は理解しやすいと思います。.NETはこの辺シンプルですし。(値型、参照型)
むしろCの構造体との混同が怖いです。新人君に教えるときは.NETではオブジェクトの大きな分類として値型、参照型というものがあり、それぞれStruct(構造体)、とClass(クラス)である。と教えてます。
じつわzeeさんのネタを新人教育の参考にしてるのでwktkしながら待ってたりw

# re: 超初心者からの脱却(値型と参照型) 2007/07/24 18:04 ghost_shell
あれ??

アドレスの代入と値の代入が逆じゃない?

いや、MyAngleDistance2.s = 20.234 が MyAngleDistance1.s = 20.234 ではないとおかしいのか。


>混乱スル方は、スルーしてもらえたらいいと思います。

超混乱していて、なおかつスルーできません。

# re: 超初心者からの脱却(値型と参照型) 2007/07/24 18:06 ghost_shell
(書き直し)

あれ??

アドレスの代入と値の代入が逆じゃない?

いや、MyAngleDistance2.s = 20.234 の部分がおかしいのか。(MyAngleDistance1.s = 20.234 )


>混乱スル方は、スルーしてもらえたらいいと思います。

超混乱していて、なおかつスルーできません。


# re: 超初心者からの脱却(値型と参照型) 2007/07/24 18:35 とっちゃん
6月東京のビデオと、8/4 の勉強会参加がお勧めw<おい!

いや、本当にわかりやすく解説してくれてますよ<6月

Native系は、8/18 に大阪でやります。
もちろん、値型や参照型に相当するものも出てきますけど、どっちかと言うと誰がどこに確保してるのか?と言う話が中心になるはずw

#あー。ネタを詰めねば...orz


# re: 超初心者からの脱却(値型と参照型) 2007/07/25 9:32 Zee
まどかさんへ
>次回はぜひ値渡しと参照渡しについてを!
次はSubとFunctionメソッドにいくつもりでした^^
ByvalとByRefはちょっと待ってください^^;
必ず書こうと思ってます。

黒龍さんへ
>むしろCの構造体との混同が怖いです。
私は幸い?VBしか知りません。
というか勉強出来ていません。(まだ途中ですし)
だから、Cの話は全く入ってないってことで見ていただけると幸いです。
(わんくま的には見逃せないと思いますが・・・^^;)

ghost_shellさんへ
>いや、MyAngleDistance2.s = 20.234 の部分がおかしいのか。(MyAngleDistance1.s = 20.234 )
値型と参照型の違う動きが分かるように意図的にしています。
構造体は参照先からの値の変更を許していないということが言いたいだけなんですけど。
だから、ダメな例なのです^^;

とっちゃんさんへ
>6月東京のビデオと、8/4 の勉強会参加がお勧めw<おい!
>いや、本当にわかりやすく解説してくれてますよ<6月
一度に全部見れてませんが、勉強させてもらっています。

>値型や参照型に相当するものも出てきますけど、どっちかと言うと誰がどこに確保してるのか?と言う話が中心になるはずw
うわー理解できるか自信ないな^^;

# re: 超初心者からの脱却(値型と参照型) 2007/07/25 10:46 zee
ghost_shellさんへ
すいません
クラス内の記述で
MyAngleSpan2.s = 10.123
となっていたのですが、
MyAngleSpan1.s = 10.123
の誤りでした。編集していますので、
他の皆さんで参照した方は、ご迷惑をおかけしております。


# re: 超初心者からの脱却(値型と参照型) 2007/07/25 12:10 とっちゃん
>うわー理解できるか自信ないな^^;
話の根源は、メモリってのは限られたリソース(資源)なんだから、大事に使え!
ってところです。
まぁ、ネタそのものはNative系の話なので、どう転んでも小難しい方向に進むとは思いますけどwww

基本は閉じたプロセス内の話だけのつもりなので、マシン全体でうんぬんとか、/3G とかその辺は出てきませんw
まぁ、使えるメモリの領域はトータル2Gというのは出てくるけどw


Post Feedback

タイトル
名前
Url:
コメント: