繼承的概念:讓派生類(子類)擁有基類(父類)所有的功能。
實作:通過在派生類後加 “:”冒号,實作繼承。好處:增加了代碼的重用性。
如果一個類沒有顯示定義其父類,那麼他的父類是System.Object,隻能有一個基類。
建立派生類對象的時候,預設的情況的下,在派生類通過調用基類的預設構造(通路修飾符是public,并且沒有任何的形參)函數來建立基類對象的。如果基類沒有預設的構造,則需要在派生類中顯示調用基類的構造函數。
方式:派生類構造函數():base(實參)
{}
構造函數:類構造函數,對象構造函數,派生類調用基類的構造函數。構造函數的作用:初始化字段,給字段指派。
靜态構造函數:靜态構造函數不能有通路修飾符,必須是靜态的。
靜态構造函數不能有任何參數。靜态構造函數有且僅有一個構造函數。靜态構造函數隻執行一次,調入記憶體後就不再執行。
例:
Public class Person
{
Static Person(){}
}
Static的作用:在記憶體中建立類的實體。
注:沒有指定基類,則基類預設為object
防止繼承—密封類,關鍵字(sealed),該類就不能作為其他類的基類。
例:給飯卡充錢:
public class Peson
{
private ushort height;//字段
public ushort Height
{
get
{
Console.WriteLine("調用Get方法");
return height;
}
set
Console.WriteLine("調用Set方法");
height = value;
}
private string name;
private byte age;
}
public class Card
private string owner;
public string Owner
get { return owner; }
set { owner = value; }
private decimal balance;
public decimal Balance
get { return balance; }
set { balance = value; }
public class Teacher : Peson
public void FullMoney(Card card, decimal money)
card.Balance += money;
public class Student : Peson
private Card myCard;
public Card MyCard
get { return myCard; }
set { myCard = value; }
class Program
static void Main(string[] args)
Student s = new Student();
s.Height = 15;
Console.WriteLine(s.Height);
Card card = new Card();
s.MyCard = card;
Teacher t = new Teacher();
t.FullMoney(card, 100);
Console.WriteLine(s.MyCard.Balance);
輸出結果:
調用Set方法
調用Get方法
15
100
派生類調用基類的方法:1、如果派生類中沒有基類的方法,可以直接調用該方法。
2、派生類中有該方法應該用base.方法名調用
例:public class CustomerAccount
public virtual decimal CalculatePrice()
return 0.0m;
class GoldAccount : CustomerAccount
public override decimal CalculatePrice()
return base.CalculatePrice()*0.9m;
構造函數舉例:
1、public class Student
public Student()
Console.WriteLine("調用構造函數");
Student st = new Student();
輸出結果:調用構造函數
例2、在繼承中,建立對象的執行過程。
public class Person
public Person()
Console.WriteLine("Peson");
public Person(string name)
Console.WriteLine("Name:"+name);
public class Student:Person
: base()//當為無參時,可有可無,系統會自動添加
public Student(string name)
: base()//當基類有多個構造函數時,base用來指定調用的構造函數
Console.WriteLine("調用構造函數:姓名:"+name);
public Student(string name, int age)
: base(name)//調用 Person(string name)構造函數
Console.WriteLine("調用構造函數:姓名:" + name+" 年齡:"+age);
Student st = new Student();
Student st1 = new Student("xiaowang");
Student st2 = new Student("xiaowang",12);
Peson
調用構造函數
Peson
調用構造函數:姓名:xiaowang
調用構造函數:姓名:xiaowang 年齡:12