C#学习系列之静态成员和静态类
- 啰嗦
- 静态成员
- 静态类
- 总结
啰嗦
基础学习
静态成员
带有标识为static的字段、方法、属性、构造函数、事件就是静态成员。
class Dog
{static string name;//静态成员}
name可以被类的所有实例共享,所有实例都访问同一个内存位置。
静态成员可直接通过类名访问,例如dog.name="lili"
静态成员独立于任何实例,没有实例也可以访问。其初始化语句的任何静态成员使用之前调用。
静态函数成员也是独立于任何实例,没有实例也可以调用。
静态函数不能访问实例成员,仅能访问其他静态成员。
class Dog
{static public void speak()//静态方法,打印静态成员{Console.writeLine(name);}
}
静态构造函数,初始化对象,用于初始化静态字段。和类相同,使用static,无参数,无访问修饰符。
class Dog{static Dog(){//与类同名,无参,只能访问静态成员name="lili";}
}
静态字段定义后相当于公共财产,使用时,当派生类实例化多个使用,就会出现访问同一个静态字段的情况,如定义静态字段num用于计数,实例化多次,num就会++计数。当然前提需要在函数中出现num++的计数计算,每次调用就会计数累加。
class Pet
{protected string _name;public Pet(string name){_name=name;}
}
class Dog:Pet
{static int num;static Dog(){num=0;}public Dog(string name):base(name){++num;//只要是Dog,那么就是会进行++计算。}
}
静态类
包含静态的方法和属性,标识为static
不能创建实例,不能继承,可以构造静态构造函数。
用于基础类库(例如math中几乎都是静态的)和扩展方法。
扩展方法:源代码的基础上,一种直接添加新方法,一种不能修改以派生子类扩展,一种使用静态类扩展。
static class Petguide
{public static double HowToFeed(Dog dog)//扩展方法,把dog对象传进来{}
}static class Petguide
{public static double HowToFeed(this Dog dog)//加上this{}
}
Dog dog=new Dog();
dog.HowToFeed();//用起来就像是本身的方法,直接用
所属的类必须是static类,扩展方法本身必须就是static方法,第一个参数类型必须是this+类名。
类本身没有相关的方法,通过扩展类来实现扩展一些方法。
总结
学习记录
https://www.imooc.com/video/14232
https://www.imooc.com/video/14233