C# 如何从非静态类创建静态类

C# 如何从非静态类创建静态类,c#,class,oop,C#,Class,Oop,所以我有一个非静态类 public class Client { private string _firstname, _lastname, _address; //Public constructors and Properties would go here// } 我想知道是否有任何方法可以从这个类中生成一个静态类,我可以使用它来存储当前正在使用的客户端的数据。我想您正在寻找单例模式。此模式只允许创建客户机类的单个实例,并提供对该实例的简单访问 要实现它,请使用以下代码

所以我有一个非静态类

public class Client 
{
    private string _firstname, _lastname, _address;
    //Public constructors and Properties would go here//
}

我想知道是否有任何方法可以从这个类中生成一个静态类,我可以使用它来存储当前正在使用的客户端的数据。

我想您正在寻找单例模式。此模式只允许创建客户机类的单个实例,并提供对该实例的简单访问

要实现它,请使用以下代码:

注意:还应将类的构造函数设置为private


现在,您可以使用
Client.instance

访问(并隐式创建实例)您的客户机类。好的,这里有两种不同的方法

首先,也是最重要的:确保这是你真正想要做的。如果有人正在连接到您,而您正在存储有关客户机的信息,那么您可能需要该类的非静态实例。比如:

public string OuterRequest(string someInput)
{
    Client requestor = new Client(); // Client instance for this request
    DoSomething(requestor);
    DoSomethingElse(requestor);
    return "Something";
}
public class Client
{
    private Client() { } // private constructor

    public static Client instance = new Client();

    // usage:  Client.instance.WhateverPropertyYouWant;
}
。。。明白我的意思了吗?有人生成一个请求,您创建一个新的客户机类实例来存储该信息。有什么需要这些数据的吗?您将实例传递给他们,以便他们可以获得有关请求/客户机的信息

接下来,如果你确定你真的想要一个实例

在这种情况下,下一个选择是做所谓的“单例”。最终,您需要两个构建块来实现这一点:

  • 私有构造函数
  • 作为类实例的公共静态属性
  • 因此,在代码方面,您看到的是:

    public string OuterRequest(string someInput)
    {
        Client requestor = new Client(); // Client instance for this request
        DoSomething(requestor);
        DoSomethingElse(requestor);
        return "Something";
    }
    
    public class Client
    {
        private Client() { } // private constructor
    
        public static Client instance = new Client();
    
        // usage:  Client.instance.WhateverPropertyYouWant;
    }
    

    你只需要一个简单的静态类。为什么?因为,通过这种方式,您可以创建一个单元测试,该测试可以启动客户端类的第二个实例来测试功能,而不会弄乱客户端类的主/常规实例的属性等。

    Put
    static
    作为访问修饰符。为什么要使该类成为静态的?只需创建这个类的一个实例并使用它。这样,当您处理不同的客户端时,您可以创建一个新实例。您可以在客户端类中包含一个静态字段/属性,该字段/属性将保存您正在处理的当前客户端实例。也就是说,像这样的全球国家通常是个坏主意。让您正在使用的客户端仅限于执行工作的代码。正如TJ所说,只需添加
    静态
    。你的问题不够详细。对于静态类来说,该类看起来不太合适——你真的只有一个
    客户端吗?从来没有
    列表