C#のthisとbaseの違いとサンプルです。
目次
サンプル | thisとbaseの違い |
thisでインスタンス変数を指す | |
base.メソッドで親クラスのメソッドを実行 | |
コンストラクタのthis(オーバーロード) | |
コンストラクタのbase(継承元を指定) |
thisとbaseの違い
キーワード | 意味 |
---|---|
this | 自分のクラスのインスタンスを指します。 |
base | 親クラスのインスタンスを指します。 |
- thisは自分のクラスのインスタンスを指します。
- base.メソッドで親クラスのメソッドを実行できます。
- this,baseは、コンストラクタでも使用されます。
thisでインスタンス変数を指す
using System;
class Employee
{
public string name;
public Employee(string name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Test1
{
static void Main()
{
Employee emp = new Employee("suzuki");
Console.WriteLine(emp.getName());//suzuki
}
}
7行目は、thisを使用しています。
この場合、4行目の変数に値がセットされます。
仮にthisがなかった場合、nameはローカル変数となり、
4行目に値はセットされません。
base.メソッドで親クラスのメソッドを実行
using System;
class Employee
{
public string getName()
{
return "suzuki";
}
}
class Employee2 : Employee
{
public string getName2()
{
return (base.getName());
}
}
class Test1
{
static void Main()
{
Employee2 emp = new Employee2();
Console.WriteLine(emp.getName2());//suzuki
}
}
9行目のクラスは、3行目のクラスを継承しています。
13行目はbaseで親クラスの4行目のメソッドを実行します。
21行目の結果は、親クラスで実行された値が出力されます
コンストラクタのthis(オーバーロード)
using System;
class Employee
{
public string name;
public Employee(string name)
{
this.name = name;
}
public Employee(int num):this("suzuki")
{
}
}
class Test1
{
static void Main()
{
Employee emp = new Employee(100);
Console.WriteLine(emp.name);//suzuki
}
}
5,9行目は、オーバーロードです。コンストラクタ名が同じで引数が異なるものです。
9行目のthisは、string型の引数が1つなので一致する5行目のコンストラクタを指します。
コンストラクタのbase(継承元を指定)
using System;
class Employee
{
public string name;
public Employee(string name)
{
this.name = name;
}
}
class Employee2 : Employee
{
public Employee2(int num) : base("suzuki")
{
}
}
class Test1
{
static void Main()
{
Employee2 emp = new Employee2(100);
Console.WriteLine(emp.name); //suzuki
}
}
12行目は、コンストラクタです。
12行目のbaseは、親クラスの5行目のコンストラクタを実行します。
関連の記事