C#
 Computer >> コンピューター >  >> プログラミング >> C#

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 キーワードは基底クラスのコンストラクター呼び出しに使用します。これらを適切に使い分けることで、初期化処理の重複を避け、コードの保守性を高めることができます。

  1. PHPのimagepalettecopy()関数で画像から画像へパレットをコピーする方法

    imagepalettecopy() は、PHPに標準で組み込まれている関数の一つで、ある画像から別の画像へカラーパレットをコピーするために使用されます。ソース画像(コピー元)のパレット情報を、デスティネーション画像(コピー先)へそのまま複製できます。 構文 void imagepalettecopy(resource $destination, resource $source) パラメータ imagepalettecopy() は $source と $destination の2つの引数を受け取ります。 $destination − パレットのコピー先となる画像リソースを指定します。

  2. JavaのSwingUtilities.invokeLater()メソッドの使い方を徹底解説

    invokeLater()メソッドとはinvokeLater()メソッドは、SwingUtilitiesクラスが提供するstaticメソッドの一つで、AWTイベントディスパッチスレッド(Event Dispatch Thread)上でタスクを非同期に実行するために使用されます。このメソッドはSwingUtilities.invokeAndWait()とよく似た動作をしますが、大きな違いは、処理のリクエストをイベントキューに登録した後、すぐに呼び出し元へ制御を返すという点です。つまり、invokeLater()は引数で渡されたRunnableオブジェクト内のコードブロックの実行完了を待ちません。