static 关键字也是 using static 指令的一部分。

使用 static 修饰符可声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于声明 static 类。在类、接口和结构中,可以将 static 修饰符添加到字段、方法、属性、运算符、事件和构造函数。static 修饰符不能用于索引器或终结器。

可以将 static 修饰符添加到本地函数。静态本地函数无法捕获局部变量或实例状态。

static 类

{
    static void Main ( string [ ] args )
    {
        Console . WriteLine ( Lei常数 . E );
        Console . WriteLine ( Lei常数 . Pi );
    }
}

public static class Lei常数
    {
        public const double E = double . E;
        public const double Pi = double . Pi;
    }

static 类的常数隐式的是 static 的。

无法声明静态类的实例,警告 CS0723:无法声明静态类型“Lei常数”的变量。

public static class Lei常数
    {
        public struct JG原点
            {
                public static int X = 0;
                public static int Y = 0;
            }
    }

static void Main ( string [ ] args )
    {
        Console . WriteLine ( $"< {Lei常数 . JG原点 . X},{Lei常数 . JG原点 . Y} >" );
    }

上例输出:
< 0,0 >
上例只能使用完全限定的名称 Lei常数 . JG原点 . X 或 Y 引用静态成员,除非你的代码在 Lei常数 static 类里面。

对于非 static 类,尽管类的实例包含该类的所有实例字段的单独副本,但每个 static 字段只有一个副本。

不可以使用 this 引用 static 方法或属性访问器。

如果 static 关键字应用于类,则类的所有成员(除常数和结构)都必须为 static。

class、interface 和 static 类可以具有 static 构造函数。在程序开始和实例化类之间的某个时刻调用 static 构造函数。

备注:static 关键字比用于 C++ 中时受到的限制更多。

若要演示 static 成员,请考虑表示“小狗”(XiaoGou)的类。假定此类包含计数小狗的方法和存储小狗人数的字段。方法和字段均不属于任何一个小狗实例。相反,它们属于全体小狗这个类。应将其声明为该类的 static 成员。

静态的字段或方法

此示例读取新狗的姓名和 ID,员工计数器按 1 递增,并显示新狗信息和新狗数。此程序从键盘读取小狗的当前数。

public class XiaoGou
    {
        public string _ID , _Ming;

        public XiaoGou ( )
            {

            }

        public XiaoGou ( string ID , string 名 )
            {
            _ID = ID ;
            _Ming = 名;
            }

        public static int JiShuXiaoGou;
        public static int TianJiaGou ( )
            {
                return ++JiShuXiaoGou;
            }
    }

Console . Write ( "输入小狗的名字:" );
string ming = Console . ReadLine ( );
Console . Write ( "输入小狗的 ID:" );
string ID = Console . ReadLine ( );

XiaoGou g = new XiaoGou ( "001" , "来福" );
Console . Write ( "输入小狗的数量:" );
string n = Console . ReadLine ( );
XiaoGou . JiShuXiaoGou = int . Parse ( n );
XiaoGou . TianJiaGou ( );

Console . WriteLine ( $"{g . _Ming},{g . _ID}" );
Console . WriteLine ( $"狗的新数量:{XiaoGou . JiShuXiaoGou}" );

Static 初始化

此示例演示了如何使用尚未声明的 static 字段来初始化另一个 static 字段。在向 static 字段显式赋值之后才会定义结果。

{
    static int x = y; // 此时的 y 等于 0
    static int y = 10; // 此时的 x 等于 y 还是 0,但此后的……
    static void Main ( string [ ] args )
        {
            Console . WriteLine ( $"X = {x}" ); // 输出:0
            Console . WriteLine ( $"Y = {y}" ); // 输出:10

            x = 120;
            Console . WriteLine ( x ); // 输出:120
        }
}

兔子码农
4 声望1 粉丝

一个酒晕子