C# コンストラクター
C# コンストラクター
このチュートリアルでは、例を使用して C# コンストラクターとその型について学習します。
C# では、コンストラクターは、クラスのオブジェクトが作成されるときに呼び出されるメソッドに似ています。
ただし、メソッドとは異なり、コンストラクター:
- クラスと同じ名前です
- 戻り値の型はありません
C# コンストラクターを作成する
C# でコンストラクターを作成する方法は次のとおりです
class Car {
// constructor
Car() {
//code
}
}
ここで、Car() コンストラクタです。クラスと同じ名前です。
コンストラクタを呼び出す
コンストラクターを作成したら、 new
を使用して呼び出すことができます キーワード。たとえば、
new Car();
C# では、クラスのオブジェクトを作成しようとすると、コンストラクターが呼び出されます。たとえば、
Car car1 = new Car();
ここでは、Car() を呼び出しています。 オブジェクト car1 を作成するコンストラクタ .オブジェクトの詳細については、C# クラスとオブジェクトをご覧ください。
コンストラクタのタイプ
次のタイプのコンストラクターがあります:
- パラメータなしのコンストラクタ
- パラメータ化されたコンストラクタ
- デフォルトのコンストラクタ
1.パラメーターなしのコンストラクター
パラメーターなしでコンストラクターを作成すると、それはパラメーターなしのコンストラクターと呼ばれます。たとえば、
using System;
namespace Constructor {
class Car {
// parameterless constructor
Car() {
Console.WriteLine("Car Constructor");
}
static void Main(string[] args) {
// call constructor
new Car();
Console.ReadLine();
}
}
}
出力
Car Constructor
上記の例では、Car() という名前のコンストラクターを作成しました。 .
new Car();
new
を追加してコンストラクタを呼び出すことができます コンストラクター名にキーワードを追加します。
2. C# パラメータ化コンストラクタ
C# では、コンストラクターもパラメーターを受け入れることができます。これは、パラメーター化されたコンストラクターと呼ばれます。たとえば、
using System;
namespace Constructor {
class Car {
string brand;
int price;
// parameterized constructor
Car(string theBrand, int thePrice) {
brand = theBrand;
price = thePrice;
}
static void Main(string[] args) {
// call parameterized constructor
Car car1 = new Car("Bugatti", 50000);
Console.WriteLine("Brand: " + car1.brand);
Console.WriteLine("Price: " + car1.price);
Console.ReadLine();
}
}
}
出力
Brand: Bugatti Price: 50000
上記の例では、Car() という名前のコンストラクターを作成しました。 .コンストラクターは 2 つのパラメーターを取ります:theBrand そして価格 .
声明に注目してください、
Car car1 = new Car("Bugatti", 50000);
ここでは、2 つの値をコンストラクターに渡しています。
コンストラクターに渡される値は、引数と呼ばれます。パラメータと同じ数と型の値を渡す必要があります。
3.デフォルトコンストラクタ
クラスでコンストラクターを定義していない場合、C# は、空のコードとパラメーターのない既定のコンストラクターを自動的に作成します。たとえば、
using System;
namespace Constructor {
class Program {
int a;
static void Main(string[] args) {
// call default constructor
Program p1 = new Program();
Console.WriteLine("Default value of a: " + p1.a);
Console.ReadLine();
}
}
}
出力
Default value of a: 0
上記の例では、Program にコンストラクターを作成していません。 クラス。ただし、オブジェクトの作成中にコンストラクターを呼び出しています。
Program p1 = new Program();
ここで、C# は既定のコンストラクターを自動的に作成します。デフォルト コンストラクターは、初期化されていない変数をデフォルト値で初期化します。
したがって、0 を取得します int
の値として 変数 a .
注意 :デフォルトのコンストラクターでは、すべての数値フィールドが 0 に初期化されますが、文字列とオブジェクトは null として初期化されます。
4. C# でコンストラクターをコピー
コピー コンストラクターを使用して、別のオブジェクトからデータをコピーしてオブジェクトを作成します。たとえば、
using System;
namespace Constructor {
class Car {
string brand;
// constructor
Car (string theBrand) {
brand = theBrand;
}
// copy constructor
Car(Car c1) {
brand = c1.brand;
}
static void Main(string[] args) {
// call constructor
Car car1 = new Car("Bugatti");
Console.WriteLine("Brand of car1: " + car1.brand);
// call the copy constructor
Car car2 = new Car(car1);
Console.WriteLine("Brand of car2: " + car2.brand);
Console.ReadLine();
}
}
}
出力
Brand of car1: Bugatti Brand of car2: Bugatti
上記のプログラムでは、コピー コンストラクターを使用しています。
Car(Car c1) {
brand = c1.brand;
}
ここで、このコンストラクターは Car のオブジェクトを受け入れます そのパラメーターとして。したがって、car2 を作成するときに オブジェクト、car1 を渡しました オブジェクトをコピー コンストラクターへの引数として渡します。
Car car2 = new Car(car1);
コピー コンストラクター内で、brand の値を割り当てました。 car1 用 ブランドに対する反対 car2 の変数 物体。したがって、両方のオブジェクトのブランドの値は同じです .
5.プライベート コンストラクター
private
を使用してプライベート コンストラクターを作成できます。 アクセス指定子。これは、C# ではプライベート コンストラクターとして知られています。
コンストラクターがプライベートであると宣言されると、そのクラスのオブジェクトを他のクラスで作成することはできません。
例 1:プライベート コンストラクター
using System;
namespace Constructor {
class Car {
// private constructor
private Car () {
Console.WriteLine("Private Constructor");
}
}
class CarDrive {
static void Main(string[] args) {
// call private constructor
Car car1 = new Car();
Console.ReadLine();
}
}
}
上記の例では、プライベート コンストラクター Car() を作成しました。 . private メンバはクラス外ではアクセスできないので、 Car のオブジェクトを作ろうとすると
// inside CarDrive class
Car car1 = new Car();
エラーが発生します
error CS0122: 'Car.Car()' is inaccessible due to its protection level
注意 :コンストラクターがプライベートの場合、クラスのオブジェクトを作成できません。したがって、クラスのすべてのフィールドとメソッドは、クラス名を使用してアクセスできるように、静的に宣言する必要があります。
6. C# 静的コンストラクター
C# では、コンストラクターを静的にすることもできます。 static
を使用します キーワードを使用して静的コンストラクターを作成します。たとえば、
using System;
namespace Constructor {
class Car {
// static constructor
static Car () {
Console.WriteLine("Static Constructor");
}
// parameterless constructor
Car() {
Console.WriteLine("Default Constructor");
}
static void Main(string[] args) {
// call parameterless constructor
Car car1 = new Car();
// call parameterless constructor again
Car car2 = new Car();
Console.ReadLine();
}
}
}
上記の例では、静的コンストラクターを作成しました。
static Car () {
Console.WriteLine("Static Constructor");
}
静的コンストラクターを直接呼び出すことはできません。ただし、通常のコンストラクターを呼び出すと、静的コンストラクターが自動的に呼び出されます。
Car car1 = new Car();
ここでは、Car() を呼び出しています。 コンストラクタ。静的コンストラクターも通常のコンストラクターと一緒に呼び出されることがわかります。
出力
Static Constructor Default Constructor Default Constructor
静的コンストラクターは、プログラムの実行中に 1 回だけ呼び出されます。そのため、コンストラクターを再度呼び出すと、通常のコンストラクターのみが呼び出されます。
注意 :クラスには静的コンストラクターを 1 つしか持てません。パラメータやアクセス修飾子を持つことはできません。
C# コンストラクターのオーバーロード
C# では、1 つのクラスに 2 つ以上のコンストラクターを作成できます。これは、コンストラクターのオーバーロードとして知られています。たとえば、
using System;
namespace ConstructorOverload {
class Car {
// constructor with no parameter
Car() {
Console.WriteLine("Car constructor");
}
// constructor with one parameter
Car(string brand) {
Console.WriteLine("Car constructor with one parameter");
Console.WriteLine("Brand: " + brand);
}
static void Main(string[] args) {
// call constructor with no parameter
Car car = new Car();
Console.WriteLine();
// call constructor with parameter
Car car2 = new Car("Bugatti");
Console.ReadLine();
}
}
}
出力
Car constructor Car constructor with one parameter Brand: Bugatti
上記の例では、Car をオーバーロードしています。 コンストラクタ:
- 1 つのコンストラクターには 1 つのパラメーターがあります
- もう 1 つは 2 つのパラメーターを持っています
コンストラクターの呼び出し中に渡された引数の数に基づいて、対応するコンストラクターが呼び出されます。
ここで、
- オブジェクト車 - 1 つのパラメーターでコンストラクターを呼び出します
- オブジェクト car2 - 2 つのパラメーターを指定してコンストラクターを呼び出す
詳細については、C# コンストラクターのオーバーロードをご覧ください。
C言語