只包含 静态方法和属性,用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 传人 虚竹)//将这个功法传给一个叫虚竹的传人,此时第一参就记录这个信息 { } }
原文:https://www.cnblogs.com/cicily/p/10930080.html