Как создать статический класс из нестатического класса - PullRequest
0 голосов
/ 18 мая 2018

Итак, у меня есть нестатический класс

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

Мне было интересно, есть ли какой-либо класс из этого класса, который я могу использовать для хранения данных текущего клиента, с которым я работаюс.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Хорошо, здесь есть несколько разных способов.

Во-первых, и самое главное: убедитесь, что это именно то, что вы действительно хотите сделать.Если кто-то подключается к вам и вы храните информацию о клиенте, вы, вероятно, хотите нестатический экземпляр класса.Что-то вроде:

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

... видите, к чему я клоню?Кто-то генерирует запрос, и вы создаете новый экземпляр класса Client для хранения этой информации.Что-нибудь, что нуждается в этих данных?Вы передаете им экземпляр, чтобы они могли получить информацию о запросе / клиенте.

Далее, если вы положительный , что вам действительно нужен один экземпляр?

В этом случае следующий вариант - сделать то, что называется «Синглтон».В конечном итоге вам нужны два строительных блока для этого:

  1. Закрытый конструктор
  2. Открытое статическое свойство, которое является экземпляром класса

Итакв коде, вы смотрите на что-то вроде:

public class Client
{
    private Client() { } // private constructor

    public static Client instance = new Client();

    // usage:  Client.instance.WhateverPropertyYouWant;
}

Вы хотите это просто над простым статическим классом.Зачем?Потому что таким образом у вас есть возможность создать модульный тест, который раскручивает второй экземпляр класса Client для тестирования функциональности, не путая свойства / etc основного / обычного экземпляра класса Client.

0 голосов
/ 18 мая 2018

Я думаю, вы ищете шаблон Singleton .Этот шаблон позволяет создавать только один экземпляр класса Client и предоставляет простой доступ к этому экземпляру.

Для его реализации используйте следующий код:

Примечание. Вам также следуетустановите конструкторы класса как private .

public class Client 
{
    private static Client instance;

    public static Client Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Client();
            }
            return instance;
        }
    }

    string _firstname, _lastname, _address;
    //Public constructors and Properties would go here//
    // Make constructors Private! //
}

Теперь вы можете получить доступ (и неявно создать экземпляр) к вашему классу Client, используя Client.Instance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...