0

我遇到了以下代码。

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

编辑

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

4

4 回答 4

4

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

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

    };
  }
}
于 2013-07-12T14:16:49.063 回答
3

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

尽管不是唯一的,除了将构造函数设为私有之外,这是单例模式中常用的一种模式。

于 2013-07-12T14:16:38.840 回答
0

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

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

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

于 2013-07-12T14:18:19.010 回答
0

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

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

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

于 2013-07-12T14:27:37.090 回答