天天看點

C#基礎入門 六

C#基礎入門 六

靜态類進階

靜态構造方法

  • 用于初始化任何靜态資料,或用于執行僅需執行一次的特定操作,在建立第一個執行個體或引用任何靜态成員之前,将自動調用靜态構造函數,靜态構造方法是無參數的。
public static class Tool
{
	static int length;
	static void fun(){}
	static Tool()
	{
		Console.WriteLine("public Tool()");//靜态類構造方法
	}
}
           

單例設計模式

  • 單例設計模式就是確定一個類隻有一個執行個體,單例模式是資源管理的必備模式,保證一個類隻有一個執行個體并且這個執行個體易于被通路。、
  • 如何實作單例模式:
    • 構造方法設為private
    • 内建靜态執行個體
    • 靜态構造方法給執行個體做初始化
public class Singleton
    {
        private static Singleton instance;//内建靜态執行個體
        private Singleton(){}//構造方法必須設為私有
        public static Singleton Instance
        {
            get { return instance; }
        }
    }
    static Singleton(){
    if (instance==null){
    instance=new Singleton();//為執行個體初始化
}}
           

抽象類

練習

  • 用我們學過的知識,實作下面結構關系:圖13
    C#基礎入門 六
class Player
    {
        public virtual void Practice()
        {
            Console.WriteLine("player's practice");
        }
    }
    class Footballplayer : Player
    {
        public override void Practice()
        {
            Console.WriteLine("footballplayer's practice");
        }
    }
    class Swimmingplayer : Player
    {
        public override void Practice()
        {
            base.Practice();
            Console.WriteLine("swimmingplayer's practice");
        }
    }
    class MainClass
    {
        public static void Main(string[] args)
        {
            Player player = new Footballplayer();
            player.Practice(); 
        }
           
    }
           
  • 在這個例子中可以發現,基類中的訓練方法隻是起到了聲明的作用,方法内部的語句,在子類中沒有用到,像這樣的方法,稱為抽象方法。
  • 用abstract修飾的方法,稱為抽象方法,抽象方法同時隐含虛方法,是以它不能再被virtual修飾。

    public abstract void Practice();

  • 抽象方法是一種新的虛拟方法,它隻起到聲明作用,是以隻加一個";"号,一定不能帶實作部分。
  • 繼承時實作具體的方法,也就是使用override重寫。
abstract class Player
{
	public abstract void Practice();
}
           
  • 抽象類的用途:提供一個可供多個派生類共享的通用基類的定義。
  • 抽象類獨立于抽象方法,也就是說沒有抽象方法,類也可以聲明為抽象類,抽象類不能被直接執行個體化,其他跟普通類沒有差別。
abstract class Animal
{
	int age;
	void func(){
		Console.WriteLine("Animal's function");
	}
}
           
abstract public class Player
        {
            abstract public void Practice();
        }
        public class Footballplayer : Player
        {
            public override void Practice()
            {
                Console.WriteLine("足球運動員在訓練");
            }
        }
        public static void Main(string[] args)
        {
            Footballplayer footballplayer =new Footballplayer();
            footballplayer.Practice();
        }
           
  • 總結:
    • 抽象方法隻做聲明,而不包含實作,抽象方法旨在繼承後實作,是以不能用private修飾;
    • 抽象類不能被直接執行個體化;
    • 抽象類可以沒有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這個類聲明為抽象類;
    • 如果抽象類的派生類不是抽象類,那麼必須重寫抽象類的所有抽象方法。
  • 抽象方法和虛方法:
    • 抽象方法一定不能有實作,虛方法一定要有實作;
    • 抽象方法被具體類繼承後,一定要被重寫,虛方法可以不重寫;
    • 抽象方法是一種特殊的虛方法,一旦類中有抽象方法,則類必須聲明為抽象類,抽象類中可以有虛方法。
下一篇: nginx配置