C# - base 關鍵字

  1. 使用 this 關鍵字能存取所屬物件的屬性與方法(指向該物件本身),常用在 method 參數名稱與屬性名稱重複的時候。base 關鍵字也是類似原理,只是 base 存取的對象是基底類別

[問題]
繼承的變數與方法若是 public 或 protected 不是本來就可以直接存取嗎?

情境一:用 base 存取基底類別的變數

第一種可能使用 base 的狀況,是當衍生類別裡面出現名稱相同的屬性,蛋想要存取的是基底類別而不是衍生類別的屬性,就可以使用 base 來存取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//base class
class Monster
{
//private int hp = 100;
protected int hp = 100;
public int getHp()
{
return hp;
}
}
//derivated class
class Slim:Monster
{

private int hp;

public Slim()
{
hp = 500;
base.hp = 2345;
}
public string say()
{
return introduceSelf()+"I am slim";
}
}

情境二:用 base 存取基底類別的方法

基底類別的method已被衍生類別override,若想存取原版 (原本在基底類別內的版本) 的 method,就可以用 base

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//base
class Monster
{
public virtual string introduceSelf()
{
return "I am monster";
}
}
//derivated
class Slim:Monster
{
public override string introduceSelf()
{
return base.introduceSelf()+"I am slim";
}
}

用 base 存取基底類別的建構子

想要呼叫基底類別的建構子 (constructor) 時,可以在自己的建構子後加上 base 來呼叫。呼叫基底類別建構子的程式碼,只能寫在繼承類別的建構子後面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//base
class Monster
{

private string name;
public Monster(string name)
{
this.name = name;
}
}
//derivated
class Slim:Monster
{
public Slim(string name):base(name)

{
hp = 500;
base.hp = 2345;
}
}

//derivated 提供給基底類別建構子的參數不一定要來自於變數
class Slim:Monster
{
public Slim():base("dididada")

{
hp = 500;
base.hp = 2345;
}
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2020 CYC'S BLOG All Rights Reserved.

UV : | PV :