static是C#中的修饰符,适用于以下情况:
- 班级
- 变数
- 方法
- 建设者
它也适用于属性,事件和运算符。要创建静态成员(类,变量,方法,构造函数),请在其声明之前添加关键字static 。将成员声明为静态成员,可以直接使用其类的名称对其进行访问。
静态类
静态类是在static关键字的帮助下声明的。静态类只能包含静态数据成员,静态方法和静态构造函数。不允许创建静态类的对象。静态类是密封的,这意味着不能从另一个类继承静态类。
例子:
// C# program to illustrate the
// concept of a static class
using System;
// Creating static class
// Using static keyword
static class Tutorial {
// Static data members of Tutorial
public static string Topic = "Static class";
}
// Driver Class
public class GFG {
// Main Method
static public void Main()
{
// Accessing the static data members of Tutorial
Console.WriteLine("Topic name is : {0} ", Tutorial.Topic);
}
}
输出:
Topic name is : Static class
静态变量
借助static关键字声明静态变量。当变量声明为静态时,将创建该变量的单个副本并在类级别的所有对象之间共享。静态变量使用类的名称进行访问,它们不需要任何对象进行访问。
例子:
// C# program to illustrate the
// concept of static varaible
using System;
class Vehicle {
// Creating static variable
// Using static keyword
public static string Model_color = "Black";
}
// Driver Class
public class GFG {
// Main Method
static public void Main()
{
// Accessing the static variable
// using its class name
Console.WriteLine("Color of XY model is : {0} ",
Vehicle.Model_color);
}
}
输出:
Color of XY model is : Black
静态方法
借助static关键字声明静态方法。静态方法使用类的名称进行访问。静态方法可以访问静态和非静态字段,静态字段可以直接通过静态方法访问,而无需类名,而非静态字段则需要对象。
例子:
// C# program to illustrate the
// concept of static method
using System;
class Nparks {
static public int t = 104;
// Creating static method
// Using static keyword
public static void total()
{
Console.WriteLine("Total number of national parks"+
" present in India is :{0}", t);
}
}
// Driver Class
public class GFG {
// Main Method
static public void Main()
{
// Accessing the static method
// using its class name
Nparks.total();
}
}
输出:
Total number of national parks present in India is :104
静态构造函数
静态构造函数是在static关键字的帮助下声明的。静态构造函数在类中仅需被调用一次,并且在创建对类中静态成员的第一个引用时已被调用。静态构造函数是初始化的静态字段或类的数据,并且只能执行一次。
要记住的要点:
- 不能直接调用。
- 在执行时,用户将无法控制。
- 它不使用访问修饰符或任何参数。
- 在创建第一个实例之前,它将自动调用以初始化类。
例子:
// C# Program to illustrate calling
// a Static constructor
using System;
class G1 {
// It is invoked before the first
// instance constructor is run.
static G1()
{
// The following statement produces
// the first line of output,
// and the line occurs only once.
Console.WriteLine("Example of Static Constructor");
}
// Instance constructor.
public G1(int j)
{
Console.WriteLine("Instance Constructor " + j);
}
// Instance method.
public string g1_detail(string name, string branch)
{
return "Name: " + name + " Branch: " + branch;
}
// Main Method
public static void Main()
{
// Here Both Static and instance
// constructors are invoked for
// first instance
G1 obj = new G1(1);
Console.WriteLine(obj.g1_detail("Sunil", "CSE"));
// Here only instance constructor
// will be invoked
G1 ob = new G1(2);
Console.WriteLine(ob.g1_detail("Sweta", "ECE"));
}
}
输出:
Example of Static Constructor
Instance Constructor 1
Name: Sunil Branch: CSE
Instance Constructor 2
Name: Sweta Branch: ECE
使用static关键字的局限性:
- 索引器,终结器或类以外的类型不能使用static关键字。
- 没有通过实例引用静态成员。
- 在C#中,不允许使用它来引用静态方法或属性访问器。
- 在C#中,如果将static关键字与类一起使用,则static类始终包含静态成员。