创建实例时的static关键字

时间:2013-07-12 14:14:31

标签: c#

我遇到了以下代码。

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是什么。我问这个问题的主要原因是为什么在创建类的实例时使用它?

4 个答案:

答案 0 :(得分:4)

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

例如:immagine您的类与客户端的某个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"     

    };
  }
}

答案 1 :(得分:3)

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

虽然不是唯一的,但同时将构造函数设为私有,这是Singleton Pattern中常用的模式。

答案 2 :(得分:0)

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

您不必创建实例即可使用static函数。您可以直接使用static函数,而无需创建类的实例。

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

答案 3 :(得分:0)

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

您的Test类本身不是静态的,因此您可以实例化它。

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