摘要
使用 static 关键字把类成员定义为静态的。当我们声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本。
关键字static表示该类仅存在成员的一个实例。静态变量用于定义常量,因为可以通过调用该类而不创建其实例来检索其值。静态变量可以在成员函数或类定义之外初始化。您也可以在类定义中初始化静态变量。
正文
静态成员是属于类所有的,调用时,直接使用类名调用
创建一个Stock库存类,做一个计数功能,就可以用static在声明一个变量
public class Stock
{
public static int Qty { get; set; }
public string PartNo { get; set; }
public string PartName { get; set; }
}
调用
Stock stock= new Stock();
stock.In(1);
stock.In(2);
stock.In(3);
stock.Out(1);
Console.Write(Stock.Qty);
静态类
静态类中定义的成员必须是静态的,不能定义实例变量、实例方法或者实例构造函数
public static class Stock
{
public static int Qty { get; set; }
public static void In(int qty)
{
Qty += qty;
}
public static void Out(int qty)
{
Qty -= qty;
}
}
Stock.In(1);
Stock.In(2);
Stock.In(3);
Stock.Out(1);
Console.Write(Stock.Qty);
public void In(int qty)
{
Qty += qty;
}
public void Out(int qty)
{
Qty -= qty;
}
Stock.Qty = 10;
Stock stock1 = new Stock();
stock1.PartNo = "A001";
stock1.PartName = "A";
stock1.In(20);
Console.WriteLine(Stock.Qty);
Stock stock2 = new Stock();
stock2.PartNo = "A001";
stock2.PartName = "A";
stock1.Out(4);
Console.WriteLine(Stock.Qty);
类的静态成员和非静态成员区别如下:
语法:静态成员有关键字static,非静态成员无static关键字;
存储: 静态成员变量存储位于程序的全局变量存储区,有一个存储位置,不会拷贝不会复制,只是一个;非静态成员变量存储位于对象的变量存储区,多个对象拥有多个变量的存储,只隶属于自己的的对象;
归属区别:静态成员隶属于类,是类的资源,无论对一个类创建多少个实例,它的静态成员都只有一个副本,在各个地方的改变都会改变其值;非静态成员隶属于它的对象,各自对象同一个非静态成员值的改变都不互相影响,有多少实例就有多少副本;
生存周期区别: 静态成员只要分配了空间则在整个程序运行期间,只有程序关闭之后,它的内存才会被GC回收器收回,不过作用域仍然只限制于类的内部;类的非静态成员的生存周期跟随于隶属于对象的生存周期,对象消亡则非静态成员就会被回收;
初始化顺序的区别:初始化都是最先初始化类的静态成员,然后是非静态数据成员。
this 配合static
internal static class Common
{
public static int StringToInt(this string value, int x = 0)
{
int result = 0;
bool ret = int.TryParse(value, out result);
if (!ret)
{
result = x;
}
return result;
}
}
网友评论