東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は

著作とお薦めの品々は
東方熱帯林へ。

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム
  16. C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
  17. .NETでマンデルブロ集合を描く
  18. .NETでマンデルブロ集合を描く(後日談)
  19. C++/CLI : とある文字列の相互変換(コンバージョン)
  20. インテルTBBによる選択ソートの高速化
  21. インテルTBB3.0 によるパイプライン処理
  22. Visual C++ 2010に追加されたSTLアルゴリズム
  23. Visual C++ 2010に追加されたSTLコンテナ「forward_list」
  24. shared_ptrによるObserverパターンの実装
  25. .NETでマンデルブロ集合を描く(番外編) ── OpenCLで超並列コンピューティング
  26. StateパターンでCSVを読む
  27. 状態遷移表からStateパターンを自動生成する
  28. 「ソートも、サーチも、あるんだよ」~標準C++ライブラリにみるアルゴリズムの面白さ
  29. インテルTBBの同期メカニズム
  30. なぜsetを使っちゃいけないの?
  31. WPFアプリケーションで腕試し ~C++でもWPFアプリを
  32. C++11 : スレッド・ライブラリひとめぐり
  33. Google製のC++ Unit Test Framework「Google Test」を使ってみる
  34. メールでデータベースを更新するココロミ
  35. Visitorパターンで遊んでみたよ
  36. Collection 2題:「WPFにバインドできる辞書」と「重複を許す検索set」
  37. Visual C++ 2012:stateless-lambdaとSQLiteのぷち拡張
  38. 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

.Netは難しいのかもしれない

えとね、
interface Idata { int data { set; get; } }
class  Ref : Idata {
  private int d;
  public int data
   
{ set { d = value; } get { return d; } }
}
struct Val : Idata {
  private int d;
  public int data
    { set { d = value; } get { return d; } }
}
↑こんな定義をしますわね。
ほんでもって

    Ref x, y;
    x = new Ref();
    y = x;
    x.data = 123;
    Console.WriteLine("Ref: x={0}, y={1}", x.data, y.data);

x, y ともに123になります。参照型だもんね。

    Val x, y;
    x = new Val();
    y = x;
    x.data = 123;
    Console.WriteLine("Val: x={0}, y={1}", x.data, y.data);

x=123, y=0 になります。値型だもんね。

    Idata x, y;
    x = new Val(); // ※
    y = x;
    x.data = 123;
    Console.WriteLine("Idata of Val: x={0}, y={1}", x.data, y.data);

げげーん、値型なのに x=123, y=123 だって。
値型をinterfaceで受けると参照になっちゃう。
なんでや。

...ってゆー初心者のギモンに正しく分かりやすく説明できる自信がありましぇん。
「蛇口(インターフェイス)をコピーしただけでタンク(実体)は同一なんだね♪」
なんて説明でわかってもらえるかしら。
"ぢゃinterfaceは参照型? 参照型に値型を代入(※)ってどゆこと???"
ってなんないかしら。

# 教え方教えて > かるぼタン

投稿日時 : 2007年10月31日 10:34

コメントを追加

# re: .Netは難しいのかもしれない 2007/10/31 10:50 シャノン

これがウワサのボックス化?
単一の値型インスタンスに対する参照が2つある状態になっているのかな?

# re: .Netは難しいのかもしれない 2007/10/31 10:51 シャノン

> "ぢゃinterfaceは参照型? 参照型に値型を代入(※)ってどゆこと???"

C なら楽なのにね>値型へのポインタ

# re: .Netは難しいのかもしれない 2007/10/31 10:51 ゆーち

未開の地の話なので、何のことだかわかりません。(w

class だとメンバすべてが参照型になる
struct だとメンバは(旧来の)値型
ってことなのでせうか?
そんな言語仕様なのかぁ・・・

こいつはC#とかいうヤツですか?

# re: .Netは難しいのかもしれない 2007/10/31 11:05 επιστημη

うん、以前にもどっかで書いたけど、
C/C++では値か参照かは"使う側"が決めるから混乱(?)はないのよ。

C#は参照/値のどっちかを"作る側"が決める。
さてここでinterfaceはなんぞや、と。

# re: .Netは難しいのかもしれない 2007/10/31 11:08 とりこびと

理屈はなんとなく分かってるんですけど説明として足る言葉にできないことって多いです。orz

かるぼさんに期待ですね♪

# re: .Netは難しいのかもしれない 2007/10/31 12:45 NyaRuRu

「自身の破壊的変更を行うインターフェイス」を値型に実装させるのは避けるべし,という話ですが,『プログラミング Microsoft .NET Framework 第2版』で詳しく解説されています.未読でしたら是非どうぞ.

あと,Extension Method でも類似の問題があります.
VB では ByRef が使えますが,C# では同様のことができない点に注意が必要です.
http://bbs.wankuma.com/index.cgi?mode=al2&namber=8251&KLOG=20

# re: .Netは難しいのかもしれない 2007/10/31 13:37 siokoshou

値型と参照型は.NETの難しい部分ですよね。

インターフェース型は参照型なので、インターフェース型に値型を入れたらbox化されます。
つまり3番目の例の x, y は参照型です。

参照型はクラス、インターフェース、配列、デリゲートです。 ← ここは初心者だろうと上級者だろうと、きっちり覚えるしかないかなと。

個人的には「値型」と「参照型」の2つがあると考えるんじゃなくて、「box化されていない値型」と「box化された値型」と「参照型」があると考えるとスッキリするかなと思っています。(ホントはポインタ型もあるけど)

初心者には struct を使わないようすすめるのも一つの手だと思ってます。

# re: .Netは難しいのかもしれない 2007/10/31 16:44 刈歩 菜良

よばれてとびでてぢぁぢゃぢゃぢゃ~~~ん
(・o・)/

んん?
もうすでにsiokoshouさんが適切な回答をされている!!
( ̄□ ̄;)!!
んぢゃ、初心者向けの説明を試みてみます。

が、しかし、長くなったので、記事にしマッスル。
少々お待ちを...

って、記事書いてたらRSSリーダーがフリーズしたぞよ...
(/。\)

# 俺流インターフェイスの解釈 2007/10/31 17:23 むりせず♪なまけず? ~ぷろくらすてぃねいたーの言い訳雑記~

俺流インターフェイスの解釈

# re: .Netは難しいのかもしれない 2007/11/01 0:37 RUN

やっぱ、現場で書き込みできないとどうしても出遅れるなorz

と言う事で(なにがじゃw)、RUN的考察を致しましたところ。
>Val x, y;
>x = new Val(); //←ここ
ここに問題ありと見た!!!
.netの世界だと構造体はnewしなくても使える。(確実なのはVBの話だけど、MSDNを見る限りC#でも同じ筈)
ClassやinterfaceはNewしないと使えないわけで、ここら辺に仕組みが見え隠れしている。

既に刈歩 菜良さんがエントリで書いてるようだけど、
構造体の場合、
>Val x, y;
の時点で、メモリ領域が確保されているので、
> y = x;
では、中身のコピーと言う挙動が可能になる。
しかし、インターフェースの場合
>Idata x, y;
の時点では当然メモリ領域が確保されていない訳で
> y = x;
では、参照のコピーしか出来ない(yはあくまでインターフェースなのでこの時点で新しくメモリ領域を確保すると言う挙動もありえない)

と、ちょい長文になりましたが考察を以上で終了します

# re: .Netは難しいのかもしれない 2007/11/01 7:06 渋木宏明(ひどり)

なるほど、分かりにくいかも。

でも、何の前提というか先入観も無く結果だけ見たら「へー、なるほど」で終わっちゃうような気も。

# 韓国コピー時計 2017/08/01 16:33 rbtbxbjv@outlook.com

野球 激安 大ヒットSALE!
【専門店】即日発送!80%以上割引
販売出售,正規品保証!
【新色】最新アイテムを海外通販!
【新商品!】安い卸売,即日発送!
【楽天市場】激安販売中、全国送料無料!
人気新品入荷*正規品*
※正規品※激安販売
【大好評2017】
100%新品代引き対応!
【限定品】超激安販売中!
『激安人気』送料無料.
『最速最新2017年人気新作!!』
愛する品を選択する高級アイテムコンセント
2年保証、返品可能、全国送料無料!
顧客サービスと速い配送でお客様に手入れ。

# ロレックス ピンクシェル ローマ 2022/02/25 1:07 vtcvmcv@msn.com

エルメス バーキン サイズ
2022年春夏新作商品
同等品質提供した格安で完璧な品質のをご承諾します
品質を重視、納期も厳守、信用第一は当社の方針です
高品質の追求 超N品を良心価格で提供
絶対に満足して頂ける品のみ皆様にお届け致します.
ご注文を期待しています!
ロレックス ピンクシェル ローマ https://www.gmt78.com/product/detail/8965.htm

# プロのカルティエ 時計 2022/09/30 22:08 zjjqremyp@excite.co.jp

とにかく今まで色々購入してきましたが、一番!!と言えるくらい最高に丁寧な梱包で、感動すら覚えました!!
ありがとうございました!!
また機会があればぜひお付き合いしたいと思いました!!
プロのカルティエ 時計 https://www.bagraku.com/bagraku26/index.htm

タイトル
名前
URL
コメント