C#のデフォルトコンストラクターとは?特徴と使い方を実例つきで解説
コンストラクター(constructor)とは、クラスの新しいオブジェクト(インスタンス)が生成されるタイミングで必ず実行される特殊なメンバー関数です。オブジェクトの初期化処理を担う重要な存在です。その中でも、引数(パラメーター)を一切取らないコンストラクターを「デフォルトコンストラクター」と呼びます。
デフォルトコンストラクターのポイント
- 引数を持ちません。
- クラスにコンストラクターを1つも定義しない場合、C#のコンパイラが自動的に暗黙的なデフォルトコンストラクターを提供します。
- 暗黙的なデフォルトコンストラクターは、数値型を「0」、bool型を「false」、参照型を「null」といった各フィールドの既定値で初期化します。
- 明示的に定義すれば、独自の初期化処理を自由に記述できます。
サンプルコード
次の例は、C#でデフォルトコンストラクターを使ってLineクラスのオブジェクトを初期化する方法を示したものです。
using System;
namespace LineApplication {
class Line {
private double length; // 線の長さ
// デフォルトコンストラクター(引数なし)
public Line() {
Console.WriteLine("オブジェクトが生成されました");
length = 10.0;
}
public void setLength(double len) {
length = len;
}
public double getLength() {
return length;
}
static void Main(string[] args) {
Line line = new Line();
Console.WriteLine("線の長さ : {0}", line.getLength());
// 長さを設定し直す
line.setLength(6.0);
Console.WriteLine("線の長さ : {0}", line.getLength());
Console.ReadKey();
}
}
}
実行結果
オブジェクトが生成されました 線の長さ : 10 線の長さ : 6
補足:パラメーター付きコンストラクターとの違い
引数を受け取って値を初期化する「パラメーター付きコンストラクター」を定義することもできます。ただし注意点として、パラメーター付きコンストラクターだけを定義すると、暗黙的なデフォルトコンストラクターは自動生成されなくなります。そのため、引数なしで new Line() と記述するとコンパイルエラーになります。両方の形式でインスタンス化したい場合は、デフォルトコンストラクターも明示的に定義しておきましょう。
// パラメーター付きコンストラクターの例
public Line(double len) {
Console.WriteLine("オブジェクトが生成されました, length = {0}", len);
length = len;
}
-
Pythonの文字列の最大長はどれくらい?sys.maxsizeで確認する上限サイズ
Pythonにおける文字列の最大長Pythonで扱える文字列の最大長は、固定値ではなく実行環境(プラットフォーム)に依存します。具体的には、システムが利用できるアドレス空間や搭載メモリ(RAM)の容量によって上限が決まります。sys.maxsizeで上限を確認する標準ライブラリのsysモジュールに定義されている定数sys.maxsizeを参照すると、その環境での最大サイズを確認できます。64ビットシステムでは 263 − 1(9223372036854775807)が返されます。>>> import sys>>> sys.maxsize92233720368
-
Python文字列の最大長はどれくらい?メモリと環境による上限を解説
Python文字列の最大長は環境によって決まるPythonにおける文字列の最大長は、理論上の上限よりも、実際に利用できるメモリ容量とPythonの実行環境(32ビットか64ビットか)によって決まります。言語仕様上、文字列の長さは Py_ssize_t 型で管理されており、64ビット環境では最大約9.2×1018(263-1)文字まで扱えることになっています。しかし、現実的にはこの上限に達する前にメモリが足りなくなります。64ビット環境の場合64ビット版のPythonを搭載し、64GBのメモリを備えたマシンであれば、約63GB程度の巨大な文字列でも十分に扱うことが可能です。さらにメモリを増設すれ