一.理解静态变量
每当变量具有静态关键字或在静态块内声明时,该变量被视为静态的。
这是一个例子。
namespace BasicCsharp
{class className{int numb = 1; // 非静态变量static int num2 = 2; // 静态变量public static void Main(string[] args){int a = 1; // 默认是静态变量}public void randomMethod(){int b = 2; // 默认是非静态变量}}
}
当您希望变量在创建的所有实例中具有相同的值时,您可以使该变量为静态。
二.静态变量与非静态变量
静态变量在类开始执行时初始化,而非静态变量在对象创建后初始化。
非静态变量会根据对象创建的次数被初始化 n 次,但静态变量在生命周期内只会初始化一次。
您可以在类外调用类的静态变量,但对于非静态变量,您需要实例来调用该变量。
namespace BasicCsharp
{class className{int nonStatic; // 非静态变量static int yesStatic = 200; // 静态变量// 构造函数public className(int nonStatic){this.nonStatic = nonStatic;}// 主方法static void Main(string[] args){// 实例化 className 之前Console.WriteLine($"static value of yesStatic {className.yesStatic}");// 在同一类中,可以直接访问静态变量,不需要类名前缀Console.WriteLine($"static value of yesStatic within sameclass {yesStatic}");// 实例化非静态变量className obj1 = new className(100);Console.WriteLine($"non static value of nonStatic {obj1.nonStatic}");}}
}
此示例显示了如何调用静态变量以及如何调用非静态变量。
这段代码的结果是
yesstatic 的静态值 200
类内 yesStatic 的静态值 200
nonStatic 的非静态值 100
三.静态和非静态的范围
对于静态变量,范围是应用程序范围,这意味着它是在类执行开始时创建的,并且与应用程序持续的时间一样长。
非静态变量在对象创建时创建,在对象删除时也被删除。
另外,当您想在静态方法中使用非静态变量时,您需要先实例化才能使用非静态变量,如果没有实例,您就不能在静态方法中使用非静态变量
四.静态和非静态构造函数
如果我们创建一个静态构造函数,我们需要在任何其他构造函数之前调用它,并且一个类中只能有一个静态构造函数。此外,静态构造函数在应用程序的生命周期中只被调用一次
同时,每个创建的对象都会被调用非静态构造函数。
namespace BasicCsharp
{class className{// 静态构造函数static className(){Console.WriteLine("Static constructor is being called");}// 非静态构造函数public className(){Console.WriteLine("Non-static constructor is being called");}// 主方法static void Main(string[] args){// 创建两个类的实例className obj1 = new className();className obj2 = new className();}}
}
这段代码的结果是
正在调用静态构造
函数 正在调用非静态构造函数
正在调用非静态构造函数
如上所示,静态构造函数仅被调用一次,而非静态构造函数在创建两个对象时被调用两次。
四.类上的静态
带有静态修饰符的类只能具有静态变量和方法。并且您不能使用静态类创建对象,我们可以使用类名访问静态类中的内容。
namespace BasicCsharp
{// 数学类public static class math{// 加法方法public static int add(int a, int b) { return a + b; }// 减法方法public static int subtract(int a, int b) { return a - b; }// 乘法方法public static float multiply(float a, float b) { return a * b; }// 除法方法public static double divide(double a, double b) { return a / b; }}// 类名类class className{static void Main(string[] args){// 调用数学类中的方法进行计算int addition = math.add(3, 3);int subtraction = math.subtract(3, 3);float multiplication = math.multiply(3, 3);double division = math.divide(3, 3);// 输出结果Console.WriteLine($"addition = {addition}, subtraction = {subtraction}, multiplication = {multiplication}, division = {division}");}}
}
这是一个静态类的例子,如您所见,它不需要实例化即可使用。它可以通过静态类来使用类中的方法。
结果是
加法 = 6,减法 = 0,乘法 = 9,除法 = 1