ITニュースランキング - 2015年3月8日(日)版

順位 ニュース
1
2015/03/07(Sat) 10:00  
  score:1,431
この記事は協力メディア「geared」からの転載です。 カメラに取り付けることで映画のようにブレがなく、ヌーっと流れるような映像が撮影できる機材をカメラスタビライザーと呼びます。一般的には高価格で、…
2
2015/03/07(Sat) 06:00  
  score:1,141
パンケーキはどこまでも自由になります。 行列のできる朝食&スイーツでお馴染みパンケーキ。パンケーキに似顔絵を描くもよし、驚くほどリアルな世界を作り出すもよし、パンケーキの世界はどこまでも広がってい…
3
2015/03/07(Sat) 08:00  
  score:998
バッテリー死にそう、でも時間がない! そんなときにはこのハックをお試しあれ~。 1. iPhoneを機内モード(Airplane mode)にする。 こうするとプッシュ通知もSMSも止まって、WiF…
  
  
  
4
2015/03/07(Sat) 09:00  
  score:961
社員が昇給よりも望んでいる、4つの「働く喜び」とは?
  
  
  
5
2015/03/07(Sat) 13:03  
  score:908
レターパックのように専用封筒を使って発送する。
6
2015/03/07(Sat) 15:00  
  score:841
ホテルが目的の旅行ではなく「とにかく安く泊まりたい」という時に一部屋5000円代、2人でシェアすれば2000円代で宿泊可能にも関わらず、Wi-Fi・有線LAN完備でインターネットもつなぎたい放題、なおかつコンクリー…
7
2015/03/07(Sat) 22:00  
  score:711
黒猫専門カフェや50年の歴史がある銭湯をリノベーションしたカフェなど、ただ飲食を行うだけではない、コンセプトを持ったカフェはいろいろ存在しますが、秋葉原駅の近くにある無料ではんだづけし放題の場所が「…
8
2015/03/07(Sat) 11:00  
  score:584
阪急電車の沿線ショップや大阪・神戸のリラックマストアなどで限定販売。ほしい……!
9
2015/03/07(Sat) 11:28  
  score:579
『地球は女で回ってる』とはウッディ・アレン監督の名作だが、ついに男性が“回せる時代”がやってきた。男が何時までも生産できるあるものを使って、電力を供給できる仕組みが開発されたのだ。 そのあるものとは、…
10
2015/03/07(Sat) 07:30  
  score:567
フォントの丸みであったりシャープさなどを細かく変更することができます。自分オリジナルのフォントを作り上げることができますよ。作ったフォントはダウンロ…
11
2015/03/07(Sat) 07:59  
  score:554
12
2015/03/07(Sat) 14:45  
  score:536
13
2015/03/07(Sat) 13:00  
  score:378
14
2015/03/07(Sat) 17:27  
  score:170
15
2015/03/07(Sat) 09:00  
  score:165
16
2015/03/07(Sat) 17:28  
  score:141
17
2015/03/07(Sat) 09:15  
  score:120
18
2015/03/07(Sat) 14:00  
  score:117
19
2015/03/07(Sat) 08:25  
  score:110
20
2015/03/07(Sat) 21:45  
  score:103
21
2015/03/07(Sat) 08:00  
  score:91
22
2015/03/07(Sat) 12:00  
  score:81
23
2015/03/07(Sat) 09:42  
  score:80
24
2015/03/07(Sat) 17:00  
  score:69
25
2015/03/07(Sat) 07:30  
  score:69
26
2015/03/07(Sat) 08:30  
  score:63
27
2015/03/07(Sat) 12:38  
  score:52
28
2015/03/07(Sat) 17:20  
  score:50
29
2015/03/07(Sat) 18:00  
  score:46
30
2015/03/07(Sat) 14:06  
  score:44
 

.NET 全てのオブジェクトをコピーする汎用ディープコピーメソッド

前回投稿した「浅いコピーと深いコピー」では、データクラスにディープコピーメソッドを実装しましたが、全てのデータクラスに深いコピーが必要なわけではありません。
 
汎用のディープコピーメソッドを作成しておくと、必要に応じてオブジェクトをコピーできるので便利です。
 
ディープコピーメソッドのソースコードは以下になります。
 
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ShallowCopyTest
{
    /// <summary>
    /// コピーユーティリティ
    /// </summary>
    public static class CopyUtility
    {
        /// <summary>
        /// 指定されたインスタンスの深いコピーを生成し返します
        /// </summary>
        /// <typeparam name="T">コピーするインスタンスの型</typeparam>
        /// <param name="original">コピー元のインスタンス</param>
        /// <returns>指定されたインスタンスの深いコピー</returns>
        public static T DeepCopy<T>(T original)
        {
            // シリアル化した内容を保持するメモリーストリームを生成
            MemoryStream stream = new MemoryStream();

            try
            {
                // バイナリ形式でシリアライズするためのフォーマッターを生成
                BinaryFormatter formatter = new BinaryFormatter();

                // コピー元のインスタンスをシリアライズ
                formatter.Serialize(stream, original);

                // メモリーストリームの現在位置を先頭に設定
                stream.Position = 0L;

                // メモリーストリームの内容を逆シリアル化
                return (T)formatter.Deserialize(stream);
            }
            finally
            {
                stream.Close();
            }
        }
    }
}
 
 
それでは前回の会員クラス(Membership)をディープコピーしてみましょう。
 
    // 会員1を生成
    Membership membership1 = new Membership();

    // 会員1のIDとパスワード、ニックネームを設定
    membership1.ID = 1;
    membership1.Password = "1234567890";
    membership1.Nickname = "変数名.com";

    // 会員2に会員1のディープコピーを代入
    Membership membership2 =
        CopyUtility.DeepCopy<Membership>(membership1);

    // 会員1の情報を表示
    Console.WriteLine("会員1 [{0}][{1}][{2}]",
        membership1.ID, membership1.Password, membership1.Nickname);

    // 会員2の情報を表示
    Console.WriteLine("会員2 [{0}][{1}][{2}]",
        membership2.ID, membership2.Password, membership2.Nickname);

    Console.WriteLine();

    // 会員1の情報を変更
    membership1.ID = 999;
    membership1.Password = "ABCDEFGHIJ";
    membership1.Nickname = "リファクタ";

    // 会員1の情報を表示
    Console.WriteLine("会員1 [{0}][{1}][{2}]",
        membership1.ID, membership1.Password, membership1.Nickname);

    // 会員2の情報を表示
    Console.WriteLine("会員2 [{0}][{1}][{2}]",
        membership2.ID, membership2.Password, membership2.Nickname);
実行結果:
 
会員1 [1][1234567890][変数名.com]
会員2 [1][1234567890][変数名.com]
 
会員1 [999][ABCDEFGHIJ][リファクタ]
会員2 [1][1234567890][変数名.com]
 
無事に会員1の情報だけが変更されました。
 

ITニュースランキング - 2015年3月7日(土)版

順位 ニュース
1
2015/03/06(Fri) 16:30  
  score:2,530
YotaPhone風のアレがiPhoneでできるぞ! 背面に電子ペーパーを搭載し、天気や株価に画面のスクショをメモ的に表示できる「YotaPhone」がスマホマニアの度肝を抜いてからはや2年。OAX…
2
2015/03/06(Fri) 15:46  
  score:1,978
ユーザーのTwitterアカウントを乗っ取り、ブランド品の激安通販サイトを宣伝するスパムの勢いが、3月に入っても止まらない。特に「レイバン」のサングラスを激安で販売していると宣伝するスパムが目立っており、…
3
2015/03/06(Fri) 15:53  
  score:1,218
スタイルいいにも程があるだろ!
4
2015/03/06(Fri) 07:30  
  score:1,153
『売れる販売員が絶対言わない接客の言葉』(平山枝美著、日本実業出版社)
5
2015/03/06(Fri) 17:00  
  score:1,079
てか、日本人もびっくりです。 上のGIFの餅つき、早送りみたいですがそうじゃなく、実際の速さなんです。あまりに強烈なのでテレビでもよく紹介されているみたいですが、これは奈良県にある「中谷堂」という和…
6
2015/03/06(Fri) 17:53  
  score:903
東京国立博物館・国立科学博物館・国立西洋美術館の3館。一般料金の人には670円お得。
7
2015/03/06(Fri) 15:32  
  score:882
静岡でしか買えないうなぎパイの販売や、限定うなぎパイスイーツの提供など、うなぎパイが盛りだくさん!
8
2015/03/06(Fri) 07:10  
  score:856
Microsoftが、Mac向けデスクトップ版Officeのプレビューを公開した。RetinaディスプレイやOS Xの最新ユーザーインタフェースをサポートする。今夏の正式版リリースまで定期的にアップデートしていく計画だ。
9
2015/03/06(Fri) 12:33  
  score:804
Appleが電子デバイスの防水性を実現する技術について、USPTO(米国特許商標庁)に特許を申請していることが判明しました。今後のiPhoneやiPadをはじめとする同社の製品が防水化される可能性を含めるものとなってい…
10
2015/03/06(Fri) 12:15  
  score:720
焼き加減がレアの国産牛をごはんにたっぷりと載せたステーキ丼を出すお店が、京都の西院にある「佰食屋(ひゃくしょくや)」です。「庶民的な価格で安全で美味しいものを提供する」というお店で、開店前に並んで整…
11
2015/03/06(Fri) 09:54  
  score:677
12
2015/03/06(Fri) 12:30  
  score:652
13
2015/03/06(Fri) 08:30  
  score:637
14
2015/03/06(Fri) 09:55  
  score:614
15
2015/03/06(Fri) 08:30  
  score:611
16
2015/03/06(Fri) 17:37  
  score:583
17
2015/03/06(Fri) 06:00  
  score:561
18
2015/03/06(Fri) 15:57  
  score:383
19
2015/03/06(Fri) 09:42  
  score:336
20
2015/03/06(Fri) 12:12  
  score:286
21
2015/03/06(Fri) 20:28  
  score:254
22
2015/03/06(Fri) 22:00  
  score:246
23
2015/03/06(Fri) 12:22  
  score:218
24
2015/03/06(Fri) 08:42  
  score:192
25
2015/03/06(Fri) 11:27  
  score:188
26
2015/03/06(Fri) 11:10  
  score:164
27
2015/03/06(Fri) 12:00  
  score:157
28
2015/03/06(Fri) 11:20  
  score:149
29
2015/03/06(Fri) 11:45  
  score:125
30
2015/03/06(Fri) 11:38  
  score:124
 

ITニュースランキング - 2015年3月6日(金)版

順位 ニュース
1
2015/03/05(Thu) 18:00  
  score:2,372
白金と青黒で意見が真っ二つだった例の糞忌々しいドレス。実物は青黒とわかってからも、写真では未だに白金に見える派と青黒に見える派で真っ二つで、ついには「見てる目の前で色が変わる」症状を訴える人まで出…
  
  
  
2
2015/03/05(Thu) 18:40  
  score:1,837
8 時間前 … 定期的にゾンビ記事をお届けインサイドですが、読者ならば「オバケン」という言葉に聞き覚えがあることではないでしょうか。「オバケン」は、過去に監禁型宿泊イベント「オバケンホテル」や「オバケ…
3
2015/03/05(Thu) 20:00  
  score:1,787
「トントントン、ツーツー」というふうに、長さの異なる符号を組み合わせて文字や数字を表すのが「モールス信号」です。たった2つの符号しか使わないモールス信号ですが、文字ごとのパターンを覚えるのが大変なも…
4
2015/03/05(Thu) 09:45  
  score:1,720
もう少し細いフォントが欲しい、横線が短めのフォントが欲しい、カクカクしたフォントが欲しいなど、自分仕様にフォントを簡単にデザインでき、それをOpenTyepとTrueTypeのフォントとしてダウンロードできるオン…
5
2015/03/05(Thu) 19:00  
  score:1,525
財布の紐がどっかに飛んでいきそう。 9日のApple Watch関連イベント(日本時間では3月10日の午前2時から)のOne more thingかもしれません。インターネット上に、同日アップルが1…
6
2015/03/05(Thu) 15:25  
  score:1,306
「ロシアの声」は不正確な情報を配信することが多いので取り扱い注意。
7
2015/03/05(Thu) 20:23  
  score:1,190
帝国データバンクによると、「美術手帖」など美術・芸術関連の雑誌・書籍の出版する美術出版社が民事再生法の適用を申請した。
8
2015/03/05(Thu) 15:13  
  score:1,000
石川県加賀市へのふるさと納税の特典として寄付金の半額の「DMMマネー」を提供する「DMMふるさと納税」が突然打ち切りに。
9
2015/03/05(Thu) 19:01  
  score:906
IllustratorやPhotoshopといったソフトを使う際に避けては通れないのがベジェ曲線の使い方です。特に初心者にとっては「最初の難関」として立ちはだかることも多いベジェ曲線ですが、そんなペンツールを使いこな…
10
2015/03/05(Thu) 09:07  
  score:864
「一度でいいからバク転をしてみたい」という願いをかなえる大人向けのバク転教室が人気を集めている。
11
2015/03/05(Thu) 06:00  
  score:812
12
2015/03/05(Thu) 20:49  
  score:738
13
2015/03/05(Thu) 22:06  
  score:707
14
2015/03/05(Thu) 07:05  
  score:543
15
2015/03/05(Thu) 07:30  
  score:532
16
2015/03/05(Thu) 15:00  
  score:524
変化    CM  
  
  
  
17
2015/03/05(Thu) 17:31  
  score:496
18
2015/03/05(Thu) 08:30  
  score:485
19
2015/03/05(Thu) 12:00  
  score:404
20
2015/03/05(Thu) 19:34  
  score:294
21
2015/03/05(Thu) 09:58  
  score:276
22
2015/03/05(Thu) 11:28  
  score:255
23
2015/03/05(Thu) 10:00  
  score:211
24
2015/03/05(Thu) 13:00  
  score:209
25
2015/03/05(Thu) 15:00  
  score:196
26
2015/03/05(Thu) 08:00  
  score:177
27
2015/03/05(Thu) 10:00  
  score:163
28
2015/03/05(Thu) 20:31  
  score:162
29
2015/03/05(Thu) 12:10  
  score:157
30
2015/03/05(Thu) 14:00  
  score:143
 

ITニュースランキング - 2015年3月5日(木)版

順位 ニュース
1
2015/03/04(Wed) 16:00  
  score:3,644
おまえ もしかしてまだ 戸愚呂がデフォルメされるとでも思ってるんじゃないかね?
2
2015/03/04(Wed) 14:35  
  score:2,938
ホワイトデーの贈り物にいかが?
3
2015/03/04(Wed) 20:06  
  score:2,669
東京・神奈川の人「な、なんだってーーー!」
4
2015/03/04(Wed) 19:26  
  score:2,197
海底に沈む戦艦「武蔵」を発見した米Microsoft共同創業者のポール・アレン氏は、8年以上にわたって海底に眠る巨大戦艦を探索してきたという。
5
2015/03/04(Wed) 13:00  
  score:951
デジタル弦とタップボタンによって弦楽器・打楽器・鍵盤楽器の演奏を1台でこなす新しい楽器が「Artiphon INSTRUMENT 1」です。AppleのGarageBandや各種DTMソフトと連携することで、ギター・ベース・バイオリン・…
6
2015/03/04(Wed) 12:27  
  score:918
東京・池袋の大型書店「リブロ池袋本店」が今年6〜7月に閉店することが明らかになり、Twitterなどソーシャルメディアでは残念がる声が広がっている。
7
2015/03/04(Wed) 23:03  
  score:784
영상이 보이지 않을때 : http://www.youtube.com/HDySA9FiA9w 영상이 보이지 않을때 : http://www.youtube.com/_As9oknsbAA. 출처 또는 참고 링크 #1: http://www.inside-games.jp/article/2015/03/04/85585.html…
8
2015/03/04(Wed) 09:44  
  score:682
Game Developers Conference 2014(GDC2014)で発表されたソニーのVRヘッドセット「Morpheus(モーフィアス)」の最新版試作機がGDC2015で公開され、着実な進化を遂げていることが明らかになりました。
9
2015/03/04(Wed) 14:44  
  score:651
3月11日の24時間内に「Yahoo!検索」で「3.11」を検索すると10円が被災地に寄付される「Search for 3.11」が今年も行われる。
10
2015/03/04(Wed) 17:00  
  score:645
10インチサイズでベストなタブレット現わる! バルセロナで開催のMobile World Congress(MWC)で、ソニーは最新の10インチタブレット「Xperia Z4 Tablet」を発表し…
11
2015/03/04(Wed) 10:58  
  score:545
12
2015/03/04(Wed) 12:30  
  score:495
13
2015/03/04(Wed) 10:21  
  score:446
14
2015/03/04(Wed) 12:02  
  score:440
15
2015/03/04(Wed) 08:30  
  score:434
16
2015/03/04(Wed) 16:30  
  score:402
17
2015/03/04(Wed) 08:00  
  score:395
18
2015/03/04(Wed) 12:30  
  score:348
19
2015/03/04(Wed) 07:30  
  score:333
社員  企業    
  
  
  
20
2015/03/04(Wed) 09:39  
  score:299
21
2015/03/04(Wed) 07:00  
  score:272
22
2015/03/04(Wed) 17:28  
  score:265
23
2015/03/04(Wed) 16:45  
  score:209
24
2015/03/04(Wed) 16:30  
  score:208
25
2015/03/04(Wed) 09:53  
  score:204
26
2015/03/04(Wed) 11:30  
  score:138
27
2015/03/04(Wed) 07:52  
  score:127
28
2015/03/04(Wed) 15:11  
  score:115
29
2015/03/04(Wed) 17:30  
  score:107
30
2015/03/04(Wed) 17:27  
  score:107
 

ITニュースランキング - 2015年3月4日(水)版

順位 ニュース
1
2015/03/03(Tue) 12:21  
  score:4,143
旧日本海軍の戦艦「武蔵」が海底で見つかったとして、ポール・アレン氏がTwitterで写真を公開した。
2
2015/03/03(Tue) 12:22  
  score:2,161
光は「粒子」の性質と「波」の性質を併せ持っていますが、これまでは同時に観測できなかったこの両方の性質を、スイス連邦工科大学ローザンヌ校(EPFL)の研究チームが世界で初めて電子顕微鏡で撮影することに成功…
  
  
  
3
2015/03/03(Tue) 16:29  
  score:2,159
ヤマト運輸は、専用ボックスで小さな荷物を配送できる対面配達サービス「宅急便コンパクト」を4月1日に始める。配送料金は地域別で、税込594円から。ボックス代65円が別途かかる。
4
2015/03/03(Tue) 15:51  
  score:2,013
廃止されるクロネコメール便の代替となるか。
5
2015/03/03(Tue) 06:00  
  score:1,748
外にでかければ街中や電車の中などでイヤホンを耳にしている人をよく見かけますが、大きめの音量で音楽を聞いている人の間で、聴力が悪化する人が増えているそうです。そんな聴力損失問題を調査した世界保健機関(…
  
  
  
6
2015/03/03(Tue) 07:30  
  score:1,487
『「おもしろい人」の話の公式』(吉田照幸著、SBクリエイティブ)の書評記事
7
2015/03/03(Tue) 17:30  
  score:1,436
8,000mmってことは8メートル。…え? カメラのレンズの焦点距離じゃない気がする。 ニコンからCOOLPIX P900がリリースされました。注目を浴びつつあるネオ一眼なスタイルで、24-2,…
8
2015/03/03(Tue) 19:32  
  score:1,195
7 時間前 … 最速ゲーム情報メディア: インサイド. follow us. インサイド … (Article written by すしし) …. GameBusiness.jpは国内唯一のゲーム業界専門紙として、ゲーム開発やマーケティングなど業界関係…
9
2015/03/03(Tue) 16:03  
  score:1,050
ポテトチップス「プリングルズ」の空き缶にはめて使えるスピーカーの全プレキャンペーンが始まる。
10
2015/03/03(Tue) 15:26  
  score:1,018
11 時間前 … 最速ゲーム情報メディア: インサイド …. Game*Sparkは国内外のゲーム情報を最速でお届けするニュースサイトです。 … GameBusiness.jpは国内唯一のゲーム業界専門紙として、ゲーム開発やマーケ…
11
2015/03/03(Tue) 15:57  
  score:908
12
2015/03/03(Tue) 21:35  
  score:858
13
2015/03/03(Tue) 10:17  
  score:747
14
2015/03/03(Tue) 12:08  
  score:579
15
2015/03/03(Tue) 07:05  
  score:546
16
2015/03/03(Tue) 16:30  
  score:431
17
2015/03/03(Tue) 12:10  
  score:407
  
  
  
18
2015/03/03(Tue) 14:00  
  score:373
19
2015/03/03(Tue) 15:37  
  score:364
20
2015/03/03(Tue) 08:30  
  score:342
21
2015/03/03(Tue) 09:53  
  score:222
22
2015/03/03(Tue) 11:27  
  score:207
23
2015/03/03(Tue) 08:00  
  score:191
24
2015/03/03(Tue) 12:05  
  score:185
25
2015/03/03(Tue) 15:16  
  score:184
26
2015/03/03(Tue) 17:27  
  score:181
27
2015/03/03(Tue) 20:27  
  score:177
28
2015/03/03(Tue) 09:57  
  score:173
29
2015/03/03(Tue) 10:33  
  score:167
30
2015/03/03(Tue) 11:32  
  score:161
 

ITニュースランキング - 2015年3月3日(火)版

順位 ニュース
1
2015/03/02(Mon) 17:11  
  score:1,879
9 時間前 … 新たな立ち絵、スチルも追加された『真の完全版』をお楽しみください♪ http://t.co/fnPsdpLIWL pic.twitter.com/k3tbFbJKgL. 東北ペネット株式会社 (@t_penet) 2015, 2月 … Tohoku Penet Inc. (Ar…
2
2015/03/02(Mon) 16:00  
  score:1,565
90年代ブームの到来が!(違います) ハイレゾ音源が増えつつある今日この頃ではありますが、古き音源も捨てたものではありません。ティアックは2014年にもダブルオートリバースカセットデッキの新モデルを…
3
2015/03/02(Mon) 18:58  
  score:1,397
第1話「伝説のマジックイナイト始動」
4
2015/03/02(Mon) 13:31  
  score:1,253
「白と金」「青と黒」と人によって色の見え方が違う写真で有名になったドレスが激売れ。実際にはなかった「白と金」も発売することにしたという。
  
  
  
5
2015/03/02(Mon) 12:07  
  score:1,236
11 時間前 … http://www.inside-games.jp/article/2015/03/02/85477.html · http://img.inside-games.jp/imgs/zoom/556511.jpg · http://img.inside-games.jp/imgs/zoom/556512.jpg · http://img.inside-games….
6
2015/03/02(Mon) 20:02  
  score:904
6 時間前 … 最速ゲーム情報メディア: インサイド. follow us. インサイド … (Article written by ひびき) …. GameBusiness.jpは国内唯一のゲーム業界専門紙として、ゲーム開発やマーケティングなど業界関係…
7
2015/03/02(Mon) 06:00  
  score:882
サムスンは未来の製品開発のための潤沢な予算を組んでおり、欧米の優れたデザイナーを雇用していますが、Samsung Design Americaの製品戦略およびユーザーエクスペリエンスデザイン部門の元トップであるケルビン…
8
2015/03/02(Mon) 09:00  
  score:740
背景に動画を使ったWebサイトや、大きな背景画像を使ったWebサイトに続き、最近は画面全体にきれいなグラデーションカラーを用いたサイトを見かける機会が増えてきました。そこで今回はグラデーションカラーをCSS…
9
2015/03/02(Mon) 21:45  
  score:724
「来週も絶対チューニングしろよ! バイバイ」が聴けるのもあと数回。
10
2015/03/02(Mon) 15:45  
  score:632
きっと、ここが帰るべき場所。
11
2015/03/02(Mon) 23:00  
  score:580
12
2015/03/02(Mon) 09:35  
  score:567
13
2015/03/02(Mon) 07:30  
  score:534
14
2015/03/02(Mon) 12:00  
  score:492
15
2015/03/02(Mon) 12:00  
  score:473
16
2015/03/02(Mon) 17:51  
  score:457
17
2015/03/02(Mon) 09:53  
  score:423
18
2015/03/02(Mon) 17:00  
  score:408
19
2015/03/02(Mon) 11:00  
  score:367
20
2015/03/02(Mon) 08:30  
  score:357
21
2015/03/02(Mon) 19:00  
  score:344
  
  
  
22
2015/03/02(Mon) 09:40  
  score:335
23
2015/03/02(Mon) 08:00  
  score:286
24
2015/03/02(Mon) 16:36  
  score:200
25
2015/03/02(Mon) 07:00  
  score:181
  
  
  
26
2015/03/02(Mon) 17:31  
  score:171
27
2015/03/02(Mon) 14:30  
  score:163
28
2015/03/02(Mon) 17:12  
  score:163
29
2015/03/02(Mon) 11:00  
  score:162
30
2015/03/02(Mon) 07:00  
  score:156
 

ITニュースランキング - 2015年3月2日(月)版

順位 ニュース
1
2015/03/01(Sun) 08:30  
  score:8,656
毎週日曜日更新!
2
2015/03/01(Sun) 16:50  
  score:1,735
仲間がふえたよ!
3
2015/03/01(Sun) 13:45  
  score:1,278
怪盗キッドが乱入?
4
2015/03/01(Sun) 11:00  
  score:966
ビジネスの場で英文メールを送る機会はありますか? 会ったことのない海外にいるスタッフや外国人の取引先に英語でメールをしたのになぜか返事が来ないんです…
5
2015/03/01(Sun) 11:27  
  score:884
クラウドファンディングサービスの『Indiegogo』で、あるプロジェクトの開始日と資金調達率を見て我が目を疑ってしまった。 本稿執筆時点でまだプロジェクト開始から2日目であるにもかかわらず、資金調達率が3,42…
6
2015/03/01(Sun) 23:50  
  score:881
毎年4回あるテレビ番組の改編期が近づいてきました。4月は1年でもっとも番組の入れ替わりが激しい時期で、アニメもその例外ではなく、新しく始まる作品の数は40本以上。「銀魂゜」「Fate/stay night [Unlimited B…
7
2015/03/01(Sun) 13:30  
  score:861
刀を鑑賞する際の心得を東京国立博物館に訊いた http://www.inside-games.jp/article/2015/03/01/85459.html #とうらぶ http://t.co/ … ノωノ) http://www.shisouan.com/musha/okita.html#yamato #刀剣乱舞 #大和…
8
2015/03/01(Sun) 06:00  
  score:683
自分の思う自分の性を、自分の言葉で書けばいい。 フェイスブックに元々あった性別オプションは、男/女/選択しないの3つでした。これが、変更されたのが数年前、56種類もの選択肢のなかから性別を選べるよう…
9
2015/03/01(Sun) 07:00  
  score:662
地球では過去に5度、生物が同時期に大量絶滅しているといわれています。その内の1つが現在から約6600万年前の白亜紀末に起こったとされる大量絶滅で、これにより地球上から恐竜がいなくなったと考えられているわ…
10
2015/03/01(Sun) 09:00  
  score:577
前回、「アメリカ西海岸のようなスタイルで、福岡で働く人々」というテーマで、海辺エリア「糸島」のことをご紹介させていただきましたが、今回は、福岡市街地…
11
2015/03/01(Sun) 16:07  
  score:555
12
2015/03/01(Sun) 10:00  
  score:469
13
2015/03/01(Sun) 22:00  
  score:443
  
  
  
14
2015/03/01(Sun) 14:40  
  score:431
15
2015/03/01(Sun) 12:00  
  score:416
16
2015/03/01(Sun) 13:00  
  score:393
17
2015/03/01(Sun) 08:30  
  score:372
18
2015/03/01(Sun) 01:37  
  score:366
19
2015/03/01(Sun) 11:26  
  score:325
20
2015/03/01(Sun) 08:00  
  score:267
21
2015/03/01(Sun) 07:04  
  score:242
22
2015/03/01(Sun) 17:28  
  score:169
23
2015/03/01(Sun) 23:18  
  score:132
24
2015/03/01(Sun) 07:00  
  score:85
25
2015/03/01(Sun) 18:00  
  score:81
26
2015/03/01(Sun) 13:39  
  score:69
  
  
  
27
2015/03/01(Sun) 16:00  
  score:55
28
2015/03/01(Sun) 17:27  
  score:45
29
2015/03/01(Sun) 18:43  
  score:44
30
2015/03/01(Sun) 11:27  
  score:43
 

ITニュースランキング - 2015年3月1日(日)版

順位 ニュース
1
2015/02/28(Sat) 12:38  
  score:848
もっちもちの幸せがここに。
2
2015/02/28(Sat) 11:00  
  score:823
「子育てサークル」と聞いて、どんな光景を思い浮かべますか?
3
2015/02/28(Sat) 07:27  
  score:700
SFドラマ「スター・トレック」シリーズで沈着冷静なエンタープライズ号技術主任、ミスター・スポックを演じた俳優のレナード・ニモイ氏が肺疾患で亡くなった。83歳だった。
4
2015/02/28(Sat) 20:45  
  score:593
1枚の写真をめぐりネットで激論が交わされた、どちらかわからない色のドレス騒動に“ある解決法”が提示される。
5
2015/02/28(Sat) 07:00  
  score:538
1日が24時間であるというのは誰もが疑いようのない事実であり、多くの人、そして社会がその仕組みの上に成り立っています。そんな社会を支えるのが「時計」の存在であり、時計なくして生活は成り立たないといえる…
  
  
  
6
2015/02/28(Sat) 12:00  
  score:507
1001馬力、最高速度407km/h、0-100km/h加速が2.5秒というぶっ飛んだ仕様で登場し、発売当時、世界最速のスーパーカーとして君臨した「ブガッティ・ヴェイロン」の最後の1台が販売され、これにてヴェイロンの製造…
7
2015/02/28(Sat) 16:00  
  score:454
遠い昔、遥か銀河の彼方…正確には128億光年彼方で、超・超巨大ブラックホールが新たに見つかりました。その重さはなんと太陽120億個分! しかし一番の驚愕ポイントはサイズではありません。年齢です。 ブ…
8
2015/02/28(Sat) 15:45  
  score:433
4月21日午後3時をもって終了する。
9
2015/02/28(Sat) 12:56  
  score:413
13 時間前 … 最速ゲーム情報メディア: インサイド. follow us … の一年後が. (Article written by 栗本 浩大) …. Game*Sparkは国内外のゲーム情報を最速でお届けするニュースサイトです。コアな … GameBu…
10
2015/02/28(Sat) 07:30  
  score:391
指定したキーワードでも検索できますし、昨日切れたドメインだけ絞り込むこともできますよ。狙っているドメインがあれば要チェックですね。
11
2015/02/28(Sat) 13:39  
  score:381
12
2015/02/28(Sat) 14:00  
  score:373
13
2015/02/28(Sat) 22:00  
  score:373
  
  
  
14
2015/02/28(Sat) 11:30  
  score:326
15
2015/02/28(Sat) 17:34  
  score:271
16
2015/02/28(Sat) 07:00  
  score:253
17
2015/02/28(Sat) 11:52  
  score:218
18
2015/02/28(Sat) 08:30  
  score:213
19
2015/02/28(Sat) 19:00  
  score:158
20
2015/02/28(Sat) 13:00  
  score:136
21
2015/02/28(Sat) 09:19  
  score:119
22
2015/02/28(Sat) 14:00  
  score:103
23
2015/02/28(Sat) 12:00  
  score:101
24
2015/02/28(Sat) 08:30  
  score:96
25
2015/02/28(Sat) 14:39  
  score:90
26
2015/02/28(Sat) 18:00  
  score:83
27
2015/02/28(Sat) 08:53  
  score:75
28
2015/02/28(Sat) 09:00  
  score:71
29
2015/02/28(Sat) 09:51  
  score:56
30
2015/02/28(Sat) 19:39  
  score:54
  
  
  
 

浅いコピーと深いコピー

オブジェクトをコピーしてデータを編集する。たとえば「保存」ボタンをクリックしたときに、編集データの保存かキャンセルを選べるような場合に有効ですが、使い方を誤ると思わぬ事故を誘発します。
 
事故の多くは浅いコピー(シャローコピー/Shallow Copy)と深いコピー(ディープコピー/Deep Copy)を間違えて「本来変わってはいけない値が変わってしまう」というものです。
 
そこで本稿ではオブジェクトの複製についてまとめていきたいと思います。
 
はじめに「会員」の情報が以下のように定義されていたとします。
 
●会員情報のクラス図
会員情報
●アカウントクラス(Account)のソース
using System;

namespace ShallowCopyTest
{
    /// <summary>
    /// アカウント
    /// </summary>
    public class Account
    {
        /// <summary>
        /// ID
        /// </summary>
        public int ID;

        /// <summary>
        /// パスワード
        /// </summary>
        public string Password;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Account()
        {
        }
    }
}
 
●会員クラス(Membership)のソース
using System;

namespace ShallowCopyTest
{
    /// <summary>
    /// 会員
    /// </summary>
    public class Membership
    {
        /// <summary>
        /// アカウント
        /// </summary>
        private Account _account = new Account();

        /// <summary>
        /// ID
        /// </summary>
        public int ID
        {
            get { return this._account.ID; }
            set { this._account.ID = value; }
        }

        /// <summary>
        /// パスワード
        /// </summary>
        public string Password
        {
            get { return this._account.Password; }
            set { this._account.Password = value; }
        }

        /// <summary>
        /// ニックネーム
        /// </summary>
        public string Nickname;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Membership()
        {
        }

        /// <summary>
        /// 現在のインスタンスのコピーを作成します
        /// </summary>
        /// <returns>現在のインスタンスのコピー</returns>
        public Membership Clone()
        {
            return (Membership)MemberwiseClone();
        }
    }
}
 
オブジェクトのコピーで一番簡単な方法は「代入」です。ためしに以下のコードを実行してみましょう。
 
        // 会員1を生成
        Membership membership1 = new Membership();

        // 会員1のIDとパスワード、ニックネームを設定
        membership1.ID = 1;
        membership1.Password = "1234567890";
        membership1.Nickname = "変数名.com";

        // 会員2に会員1を代入
        Membership membership2 = membership1;

        // 会員1の情報を表示
        Console.WriteLine("会員1 [{0}][{1}][{2}]",
            membership1.ID, membership1.Password, membership1.Nickname);

        // 会員2の情報を表示
        Console.WriteLine("会員2 [{0}][{1}][{2}]",
            membership2.ID, membership2.Password, membership2.Nickname);

        Console.WriteLine();

        // 会員1の情報を変更
        membership1.ID = 999;
        membership1.Password = "ABCDEFGHIJ";
        membership1.Nickname = "リファクタ";

        // 会員1の情報を表示
        Console.WriteLine("会員1 [{0}][{1}][{2}]",
            membership1.ID, membership1.Password, membership1.Nickname);

        // 会員2の情報を表示
        Console.WriteLine("会員2 [{0}][{1}][{2}]",
            membership2.ID, membership2.Password, membership2.Nickname);
実行結果:
 
会員1 [1][1234567890][変数名.com]
会員2 [1][1234567890][変数名.com]
 
会員1 [999][ABCDEFGHIJ][リファクタ]
会員2 [999][ABCDEFGHIJ][リファクタ]
 
会員1の情報だけを変えたつもりが、会員2の情報まで変わってしまいました。これは「membership1」と「membership2」の参照先が同じなので、会員1への変更が会員2にも反映されてしまったことが原因です。
 
会員1への変更が会員2にも反映されてしまった。。

会員1への変更が会員2にも反映されてしまった。。

 
それでは会員クラス(Membership)に実装した「Clone」メソッドでコピーしてみましょう。
 
        // 会員1を生成
        Membership membership1 = new Membership();

        // 会員1のIDとパスワード、ニックネームを設定
        membership1.ID = 1;
        membership1.Password = "1234567890";
        membership1.Nickname = "変数名.com";

        // 会員2に会員1のシャローコピーを代入
        Membership membership2 = membership1.Clone();

        // 会員1の情報を表示
        Console.WriteLine("会員1 [{0}][{1}][{2}]",
            membership1.ID, membership1.Password, membership1.Nickname);

        // 会員2の情報を表示
        Console.WriteLine("会員2 [{0}][{1}][{2}]",
            membership2.ID, membership2.Password, membership2.Nickname);

        Console.WriteLine();

        // 会員1の情報を変更
        membership1.ID = 999;
        membership1.Password = "ABCDEFGHIJ";
        membership1.Nickname = "リファクタ";

        // 会員1の情報を表示
        Console.WriteLine("会員1 [{0}][{1}][{2}]",
            membership1.ID, membership1.Password, membership1.Nickname);

        // 会員2の情報を表示
        Console.WriteLine("会員2 [{0}][{1}][{2}]",
            membership2.ID, membership2.Password, membership2.Nickname);
実行結果:
 
会員1 [1][1234567890][変数名.com]
会員2 [1][1234567890][変数名.com]
 
会員1 [999][ABCDEFGHIJ][リファクタ]
会員2 [999][ABCDEFGHIJ][変数名.com]
 
ニックネームは会員1だけ変わりましたが、アカウントの情報は会員2も変わってしまいました。これは会員クラス(Membership)に実装した「Clone」メソッドで使用している「MemberwiseClone」メソッドが、浅いコピーを作成することが原因です。
 
浅いコピーは値型のフィールドをビット単位でコピーしますが、参照型のフィールドは参照のみをコピーします。
 
会員1のアカウント情報の変更が会員2にも反映されてしまった。。

会員1のアカウント情報の変更が会員2にも反映されてしまった。。

 
参照型のフィールドもビット単位でコピーするためには、深いコピーを作成する必要があります。
 
深いコピーを作成する方法の一つにシリアライズを利用する方法があり、私はこの方法が一番わかりやすくて気に入っています。
 
シリアライズを利用するためには、クラスに[Serializable]属性を付与する必要があります。アカウントクラス(Account)と会員クラス(Membership)に付与し、続いて「Clone」メソッドをシリアライズを利用して書き換えてみましょう。
 
●アカウントクラス(Account)のソース
using System;

namespace ShallowCopyTest
{
    /// <summary>
    /// アカウント
    /// </summary>
    [Serializable]
    public class Account
    {
        /// <summary>
        /// ID
        /// </summary>
        public int ID;

        /// <summary>
        /// パスワード
        /// </summary>
        public string Password;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Account()
        {
        }
    }
}
 
●会員クラス(Membership)のソース
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ShallowCopyTest
{
    /// <summary>
    /// 会員
    /// </summary>
    [Serializable]
    public class Membership
    {
        /// <summary>
        /// アカウント
        /// </summary>
        private Account _account = new Account();

        /// <summary>
        /// ID
        /// </summary>
        public int ID
        {
            get { return this._account.ID; }
            set { this._account.ID = value; }
        }

        /// <summary>
        /// パスワード
        /// </summary>
        public string Password
        {
            get { return this._account.Password; }
            set { this._account.Password = value; }
        }

        /// <summary>
        /// ニックネーム
        /// </summary>
        public string Nickname;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Membership()
        {
        }

        /// <summary>
        /// 現在のインスタンスのコピーを作成します
        /// </summary>
        /// <returns>現在のインスタンスのコピー</returns>
        public Membership Clone()
        {
            // シリアル化した内容を保持するメモリーストリームを生成
            MemoryStream stream = new MemoryStream();

            try
            {
                // バイナリ形式でシリアライズするためのフォーマッターを生成
                BinaryFormatter formatter = new BinaryFormatter();

                // 自分自身をシリアライズ
                formatter.Serialize(stream, this);

                // メモリーストリームの現在位置を先頭に設定
                stream.Position = 0L;

                // メモリーストリームの内容を逆シリアル化
                return (Membership)formatter.Deserialize(stream);
            }
            finally
            {
                stream.Close();
            }
        }
    }
}
 
それでは会員クラス(Membership)に実装した「Clone」メソッドでもう一度コピーしてみましょう。
 
        // 会員1を生成
        Membership membership1 = new Membership();

        // 会員1のIDとパスワード、ニックネームを設定
        membership1.ID = 1;
        membership1.Password = "1234567890";
        membership1.Nickname = "変数名.com";

        // 会員2に会員1のディープコピーを代入
        Membership membership2 = membership1.Clone();

        // 会員1の情報を表示
        Console.WriteLine("会員1 [{0}][{1}][{2}]",
            membership1.ID, membership1.Password, membership1.Nickname);

        // 会員2の情報を表示
        Console.WriteLine("会員2 [{0}][{1}][{2}]",
            membership2.ID, membership2.Password, membership2.Nickname);

        Console.WriteLine();

        // 会員1の情報を変更
        membership1.ID = 999;
        membership1.Password = "ABCDEFGHIJ";
        membership1.Nickname = "リファクタ";

        // 会員1の情報を表示
        Console.WriteLine("会員1 [{0}][{1}][{2}]",
            membership1.ID, membership1.Password, membership1.Nickname);

        // 会員2の情報を表示
        Console.WriteLine("会員2 [{0}][{1}][{2}]",
            membership2.ID, membership2.Password, membership2.Nickname);
実行結果:
 
会員1 [1][1234567890][変数名.com]
会員2 [1][1234567890][変数名.com]
 
会員1 [999][ABCDEFGHIJ][リファクタ]
会員2 [1][1234567890][変数名.com]
 
今度は無事に会員1の情報だけが変更されました。
 
会員1の情報のみ変更できた!

会員1の情報だけが変更された!

 
このように深いコピーはいいことずくめのように見えますが、クラスの内容を一旦ストリームに吐き出し、そのストリームから再度クラスを生成しているので、処理は当然遅くなります。
 
何でもかんでも深いコピーを利用するのではなく、参照系は浅いコピー、更新系は深いコピーを利用するなど、ケースバイケースで使い分けることをおススメします。
g h T
 13,278 Total Views