美文网首页
41.C# 类的静态成员

41.C# 类的静态成员

作者: 技术老小子 | 来源:发表于2024-03-12 05:14 被阅读0次

    摘要


    使用 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;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:41.C# 类的静态成员

          本文链接:https://www.haomeiwen.com/subject/fptvzdtx.html