2021年12月27日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 853 count

new演算子: オブジェクトを産み出し、新世界を切り開こう

Written By: 川俣 晶連絡先

この章のテーマ §

 new演算子と2つの主な使い方を学びます。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, string型, 参照型と値型, コンストラクタ

解説 §

 new演算子は参照型と値型で機能が異なります。

 参照型で使用した場合は、コンストラクタに引数を渡し、メモリを確保して新しいオブジェクトを生成します。つまり、メモリ消費量が増えます。

 値型で使用した場合は、コンストラクタに引数を渡してオブジェクトを初期化しますが、それによってメモリを確保することはありません。つまり、使ってもメモリ消費量は増えません。

 どちらも、使い方は"new 型名(引数リスト)"ですが、型名のない匿名オブジェクトを確保する場合や、配列を確保する場合など、この通りにならないケースもいろいろあります。

罠の数々 §

  • new string('X', 10);は、文字Xが10個並んだ文字列を新たに産み出す
  • new DateTime(2029, 1, 1, 8, 30, 0);は、2029年1月1日8時30分0秒で変数を初期化する
  • new演算子を使用しないでオブジェクトを作り出すこともある。たとえば、ファクトリーパターンと呼ばれるコーディングのパターンでは、オブジェクトを作り出すメソッド等を作成し、new演算子は直接使用しない
  • 2つの文字列型の変数をX+Yのように記述して文字列を連結する場合も、new演算子は無いが新しいオブジェクトが作成されている

参考リンク §

サンプルソース: kw_new §

Console.WriteLine("参照型の場合");

var s = new string('X', 10);

Console.WriteLine($"s={s}");

Console.WriteLine("値型の場合");

var d = new DateTime(2029, 1, 1, 8, 30, 0);

Console.WriteLine($"d={d}");

実行結果 §

参照型の場合

s=XXXXXXXXXX

値型の場合

d=2029/01/01 8:30:00

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 メモリ消費量の多いオブジェクトをnew演算子で生成し続けると何が起こるだろうか。ただし、型は参照型とする。正しい解釈を選ぼう。

  1. 仮想記憶は実メモリ以上のメモリを確保できるので、どれだけ確保してもオッケー! 単に遅くなるだけ
  2. 使用可能なメモリが尽きて確実にプログラムは例外で強制終了となる
  3. 参照を保存していなければ何回newしても、別にメモリ消費量は増えない
  4. 静的な変数に格納すればメモリが溢れることはない
  5. システム依存なので、動作するシステムによってメモリ溢れが起きるかどうかは異なる

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2021年
12月
28日
代入演算子(=演算子): 変数は出たり入ったり大忙し
3days 0 count
total 966 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2021年
12月
26日
ラムダ式と匿名メソッド: =>演算子はラムダ演算子で不等号ではない
3days 0 count
total 873 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20211227102654
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.