• 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
    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修饰;
      • 抽象类不能被直接实例化;
      • 抽象类可以没有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类;
      • 如果抽象类的派生类不是抽象类,那么必须重写抽象类的所有抽象方法。
    • 抽象方法和虚方法:
      • 抽象方法一定不能有实现,虚方法一定要有实现;
      • 抽象方法被具体类继承后,一定要被重写,虚方法可以不重写;
      • 抽象方法是一种特殊的虚方法,一旦类中有抽象方法,则类必须声明为抽象类,抽象类中可以有虚方法。
  • 相关阅读:
    HDU 3547 DIY Cube
    POJ 2975 Nim
    POJ 1678 I Love this Game!
    POJ 2234 Matches Game
    POJ 3537 Crosses and Crosses
    POJ 3710 Christmas Game
    POJ 1704 Georgia and Bob
    HDU 3923 Invoker
    POJ 2154 Color
    PLM更新自定义CLASS
  • 原文地址:https://www.cnblogs.com/senlinmilelu/p/8445968.html
Copyright © 2020-2023  润新知