📜  C#中的静态关键字

📅  最后修改于: 2021-05-29 21:23:36             🧑  作者: Mango

static是C#中的修饰符,适用于以下情况:

  1. 班级
  2. 变数
  3. 方法
  4. 建设者

它也适用于属性,事件和运算符。要创建静态成员(类,变量,方法,构造函数),请在其声明之前添加关键字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类始终包含静态成员。