静态类

只包含 静态方法和属性,用static标识

静态类不能创建实例,不能被继承

主要用于 基础类库 和 静态类扩展方法

 静态扩展方法:

扩展方法所属类是static类,方法是static方法,方法第一参是this+类名。

 class Program
    {
        static void Main(string[] args)
        {
           
            Pet[] pets = new Pet[] { new Dog("DD"), new Cat("CC") };
           
            for (int i = 0; i < pets.Length; i++)
            {
                pets[i].Speak();
            }

            
            Dog D = new Dog("DD1");
            Dog.ShowNum();
            D.Lost();//
            Dog.ShowNum();
            Dog d0 = (Dog)pets[0];
            d0.Lost();
            Dog.ShowNum();

            D.FeedDog();

        }

    }
    abstract public class Pet
    {
        protected string Name;
        public Pet(string name)
        {
            Name = name;
        }
        public void PrintName()
        {
            Console.WriteLine("Print" + Name);
        }

        abstract public void Speak();
    }
    public class Dog : Pet
    {
        static int Num;
        static Dog()
        {
            Num = 0;
        }
        public Dog(string name) : base(name)/
        {
            ++Num;
        }
        new public void PrintName()
        {
            Console.WriteLine("子打印" + base.Name);
        }
        //override public void Speak()
        sealed override public void Speak()
        {
            Console.WriteLine("子说" + Name);
        }
        static public void ShowNum()
        {
            Console.WriteLine("Dog's number = " + Num);
        }
        public void Lost()
        {
            --Num;
            Console.WriteLine(Name + " is Lost!");
        }
    }
    static class PetGuide//额外创建的静态类
    {
        static public void FeedDog(this Dog dog)//静态类里的静态方法,第一参为this+类名,这是静态扩展方法
                                                //Dog类因为某种原因,不可修改,不可override等,但又需要扩展时使用的方法。
                                                //这样Dog就被额外扩展了这个功能,Dog类本身不包含这个方法,但使用起来就像Dog里直接有这个方法一样
        {
            Console.WriteLine("Play a vedio about how to feed a dog");
        }
    }
  

我的理解就是这样什的:

 class Program
    {
        static void Main(string[] args)
        {
           
            传人 虚竹 = new 传人();
            虚竹.乾坤大挪移(); //就这样莫名其妙可以直接使出来这招了,好像自己原本就有这种功力一样

        }

    }
 
    public void 传人()
    {//在大牛面前算是几乎什么也不会
    }
    static class 活死人要传授的一系列功法//虚竹自己不想得此功法,但是活死人需要传功法
    {
        static public void 乾坤大挪移(this 传人 虚竹)//将这个功法传给一个叫虚竹的传人,此时第一参就记录这个信息
        {

        }
    }

 

posted @ 2019-05-27 13:32  pu409  阅读(605)  评论(0编辑  收藏  举报