こんにちは。たいら(@tairaengineer2)です。
この記事では、C#でコンストラクタからコンストラクタを呼ぶやり方について解説します。
スポンサーリンク
前提条件
この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。
コンストラクタからコンストラクタを呼ぶためには
コンストラクタ初期化子という仕組みを使います。
書き方は
namespace ConsoleApp1
{
class Animal
{
/// <summary>
/// コンストラクタ
/// </summary>
public Animal() : this("名無し")
{
}
/// <summary>
/// コンストラクタ
/// </summary>
/// <param name="name">名前</param>
public Animal(string name)
{
Name = name;
}
/// <summary>
/// 名前
/// </summary>
public string Name { get; set; }
}
}
thisをつけて、呼びたいコンストラクタの引数の数に合うように引数を設定してあげると、コンストラクタからコンストラクタを呼ぶことができます。
これは、引数が異なるコンストラクタを簡単にそしてシンプルに作ることができるので、便利な機能だと思います。
では、実際に使ってみます。
解説するプログラムの内容
引数が異なる複数のコンストラクタを使ってインスタンスを作成します。
それぞれのインスタンスのプロパティをコンソールに表示させるプログラムです。
コンソールプロジェクトを作成するやり方は下の記事をご参考ください。
プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。
C#サンプルプログラム
プログラムは2つ作りました。
メインとインスタンスを作成するプログラムです。
インスタンス作成用プログラム
using System;
namespace ConsoleApp1
{
/// <summary>
/// Humanクラス
/// </summary>
class Human
{
/// <summary>
/// コンストラクタ
/// </summary>
public Human() : this("無名")
{
}
/// <summary>
/// コンストラクタ
/// </summary>
/// <param name="name">名前</param>
public Human(string name) : this(name, 0)
{
}
/// <summary>
/// コンストラクタ
/// </summary>
/// <param name="name">名前</param>
/// <param name="age">年齢</param>
public Human(string name, int age) : this(name, age, "無趣味")
{
}
/// <summary>
/// コンストラクタ
/// </summary>
/// <param name="name">名前</param>
/// <param name="age">年齢</param>
/// <param name="hobby">趣味</param>
public Human(string name, int age, string hobby)
{
Name = name;
Age = age;
Hobby = hobby;
}
/// <summary>
/// プロパティを表示
/// </summary>
public void Display()
{
Console.WriteLine("Name:{0}", Name);
Console.WriteLine("Age:{0}", Age);
Console.WriteLine("Hobby:{0}", Hobby);
}
/// <summary> 名前 </summary>
public string Name { get; set; }
/// <summary> 年齢 </summary>
public int Age { get; set; }
/// <summary> 趣味 </summary>
public string Hobby { get; set; }
}
}
メイン用プログラム
using System;
namespace ConsoleApp1
{
/// <summary>
/// コンストラクタからコンストラクタを呼ぶクラス
/// </summary>
class Program
{
/// <summary>
/// メイン
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
// 引数が異なるコンストラクタを3つ作成
Human noman = new Human();
Human suzuki = new Human("鈴木");
Human sato = new Human("佐藤", 32);
Human tanaka = new Human("田中", 48, "釣り");
// それぞれを表示
string line = new string('-', 10);
Console.WriteLine("引数無を表示");
noman.Display();
Console.WriteLine(line);
Console.WriteLine("引数が1つを表示");
suzuki.Display();
Console.WriteLine(line);
Console.WriteLine("引数が2つを表示");
sato.Display();
Console.WriteLine(line);
Console.WriteLine("引数が3つを表示");
tanaka.Display();
}
}
}
実行結果
引数無を表示
Name:無名
Age:0
Hobby:無趣味
----------
引数が1つを表示
Name:鈴木
Age:0
Hobby:無趣味
----------
引数が2つを表示
Name:佐藤
Age:32
Hobby:無趣味
----------
引数が3つを表示
Name:田中
Age:48
Hobby:釣り
続行するには何かキーを押してください . . .
では、解説します。
スポンサーリンク
解説
コンストラクタを呼ぶ引数の数ごとに解説します。
引数無のコンストラクタ
引数無のコンストラクタは、このように呼ばれています。
コンストラクタ初期化子で指定しているものが、設定されて次のコンストラクタを読んでいます。
最終的には
Name | 無名 |
---|---|
Age | 0 |
趣味 | 無趣味 |
という風に設定されています。
引数が1つのコンストラクタ
引数が1つのコンストラクタは、このように呼ばれています。
コンストラクタ初期化子で指定しているものが、設定されて次のコンストラクタを読んでいます。
最終的には
Name | 鈴木 |
---|---|
Age | 0 |
趣味 | 無趣味 |
という風に設定されています。
引数が2つのコンストラクタ
引数が2つのコンストラクタは、このように呼ばれています。
コンストラクタ初期化子で指定しているものが、設定されて次のコンストラクタを読んでいます。
最終的には
Name | 佐藤 |
---|---|
Age | 32 |
趣味 | 無趣味 |
という風に設定されています。
引数が3つのコンストラクタ
引数が3つのコンストラクタは、このように呼ばれています。
thisが無いので、コンストラクタを呼ばずこの中で処理をしています。
最終的には
Name | 田中 |
---|---|
Age | 48 |
趣味 | 釣り |
という風に設定されています。
スポンサーリンク
まとめ:コンストラクタ初期化子を使おう!
以上がコンストラクタからコンストラクタを呼ぶ、コンストラクタ初期化子の解説です。
引数が異なるコンストラクタを作りたいときは、コンストラクタ初期化子を使いましょう!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
ほかにもC#勉強記事を書いてます。
よければご参考ください。