C#学习系列之静态成员和静态类

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

你可能感兴趣的:(c#,学习,开发语言)