创建实例时使用static关键字

本文关键字:static 关键字 实例 创建 | 更新日期: 2023-09-27 18:22:03

我发现了以下代码。

public class Test
{
  public static Test Create() 
  {
    return new Test 
    {
     a1 =1,
     b1="abc"     
    };
  }
  :
  :
  :
}

在调用类中,它被实例化为如下

static Test model = Test.Create();

上一行中static关键字的用途是什么?如果我们不使用static关键字,会有什么不同?我正在使用.NET 4和VS 2010

编辑

我知道c#中的static是什么。我问这个问题的主要原因是为什么在创建类的实例时使用它?

创建实例时使用static关键字

在这个具体呈现的代码中,看不到使用这种技术的意义,但通常这样做可以控制类型实例的创建。

例如:想象你的类与客户端的一些COM对象交互,这些对象不能实例化10次以上。为了控制API的使用者不会创建超过10个您类型的实例,您可以使用此技术。

public class MyComWrapper {
  private  MyComWrapper () {} // MAKE CTOR PRIVATE SO NOONE CAN CREATE
                              // AN INSTANCE OF YOUR CLASS IF NOT WITH 
                              // `static` METHOD CALL
  static int counter = 0;           //INSTANCE COUNTER
  public static MyComWrapper Create() 
  {
    if(counter >10)       //MORE THEN 10, BAD !
        throw new InvalidOperationException("Can not instantiate more then 10 instances");
    counter ++;
    return new Test 
    {
     a1 =1,
     b1="abc"     
    };
  }
}

static关键字使其在不实例化对象的情况下可用。作者正在创建一个函数来以特定的方式实例化对象,但由于它是默认的构造函数,任何人都可以实例化它

虽然不是唯一的,但这是Singleton模式中常用的一种模式,同时也使构造函数私有。

Static修饰符属于类型本身,而不是特定对象。

您不必创建一个实例来使用该静态函数。您可以直接使用静态函数,而无需创建类的实例。

如果static关键字应用于类,则该类的所有成员都必须是静态的。

这很简单。它们是static的单独用途。第一个方法在非静态类中创建一个静态方法。第二个创建了一个"calling"类的静态成员。

你的Test类本身不是静态的,所以你可以实例化它

为了回答您的问题:如果您在调用类中不使用static关键字,它将是一个"普通"实例成员。