C#で同じクラス内の別のコンストラクターからコンストラクターを呼び出す方法(this / base キーワードの使い方)
C#では、同じクラス内にある別のコンストラクターを呼び出すには this キーワードを使用します。コンストラクター宣言の末尾に「: this(...)」という形式で引数を渡すことで、オーバーロードされた別のコンストラクターへ処理を委譲できます。
一方、親クラス(基底クラス)に存在するコンストラクターを呼び出したい場合は、base キーワードを使用します。こちらも同様に「: base(...)」という形式で記述します。
例1:this キーワードで同じクラスのコンストラクターを呼び出す
以下の例では、3つの引数を持つコンストラクターが、2つの引数を持つコンストラクターを呼び出し、さらにそのコンストラクターが引数なしのコンストラクターを呼び出しています。このように、コンストラクターを連鎖的に呼び出すことが可能です。
class Demo{
public Demo(){
System.Console.WriteLine("Parameter less constructor called");
}
public Demo(int firstNumber, int secondNumber) : this(){
System.Console.WriteLine($"{firstNumber} {secondNumber}");
}
public Demo(int firstNumber, int secondNumber, int thirdNumber) : this(firstNumber, secondNumber){
System.Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
}
}
class Program{
static void Main(){
Demo obj = new Demo(1, 2, 3);
Console.ReadLine();
}
}出力結果
Parameter less constructor called 1 2 1 2 3
実行結果からわかるように、「new Demo(1, 2, 3)」を呼び出すと、まず引数なしのコンストラクターが実行され、次に2引数のコンストラクター、最後に3引数のコンストラクターが順番に処理されます。
例2:base キーワードで基底クラスのコンストラクターを呼び出す
継承関係にある別のクラス(親クラス)のコンストラクターを呼び出す場合は、base キーワードを使用します。派生クラスのインスタンス生成時に、先に基底クラスのコンストラクターが実行される点に注意してください。
class DemoBase{
public DemoBase(int firstNumber, int secondNumber, int thirdNumber){
System.Console.WriteLine("Base class Constructor");
System.Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
}
}
class Demo : DemoBase{
public Demo(int firstNumber, int secondNumber, int thirdNumber) : base(firstNumber, secondNumber, thirdNumber){
System.Console.WriteLine("Derived class Constructor");
System.Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
}
}
class Program{
static void Main(){
Demo obj = new Demo(1, 2, 3);
Console.ReadLine();
}
}出力結果
Base class Constructor 1 2 3 Derived class Constructor 1 2 3
このように、this キーワードは同じクラス内のコンストラクター連鎖に、base キーワードは基底クラスのコンストラクター呼び出しに使用します。これらを適切に使い分けることで、初期化処理の重複を避け、コードの保守性を高めることができます。
-
PHPのimagepalettecopy()関数で画像から画像へパレットをコピーする方法
imagepalettecopy() は、PHPに標準で組み込まれている関数の一つで、ある画像から別の画像へカラーパレットをコピーするために使用されます。ソース画像(コピー元)のパレット情報を、デスティネーション画像(コピー先)へそのまま複製できます。 構文 void imagepalettecopy(resource $destination, resource $source) パラメータ imagepalettecopy() は $source と $destination の2つの引数を受け取ります。 $destination − パレットのコピー先となる画像リソースを指定します。
-
JavaのSwingUtilities.invokeLater()メソッドの使い方を徹底解説
invokeLater()メソッドとはinvokeLater()メソッドは、SwingUtilitiesクラスが提供するstaticメソッドの一つで、AWTイベントディスパッチスレッド(Event Dispatch Thread)上でタスクを非同期に実行するために使用されます。このメソッドはSwingUtilities.invokeAndWait()とよく似た動作をしますが、大きな違いは、処理のリクエストをイベントキューに登録した後、すぐに呼び出し元へ制御を返すという点です。つまり、invokeLater()は引数で渡されたRunnableオブジェクト内のコードブロックの実行完了を待ちません。