Основы шаблонов проектирования C # Singleton - PullRequest
0 голосов
/ 07 декабря 2018

Совсем недавно начал пытаться выучить некоторые образцы конструкций.В настоящее время пытаюсь заставить мой синглтон вернуть новый объект.Однако он продолжает выдавать ошибку «Невозможно преобразовать группу методов« getInstance »в тип без делегата« MainWdinow.CustomerLoader ». Вы намеревались вызвать метод?

вот код для метода шаблона проектирования

  public class CustomerLoader
    {
        private static Customer firstInstance = null;
        public static Customer getInstance()
        {
            if(firstInstance ==null)
            {
                firstInstance = new Customer();
            }

            return firstInstance;
        }
    }

Здесь я пытаюсь вызвать метод и получаю ошибку, упомянутую выше

CustomerLoader t = CustomerLoader.getInstance();

Я хочу, чтобы мой синглтон выполнил работу с кодом ниже и создал новый экземпляробъект клиента

Customer T = new Customer;

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Используйте это.Это также поточно-ориентированный в отличие от вашей версии

private static readonly Lazy<Customer> _instance = new Lazy<Customer>(() => new Customer());
public static Customer Instance => _instance.Value;

Но вы должны использовать инъекцию зависимостей вместо синглетонов.

И ваше имя отключено, похоже на Java, отметьте это https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members

частные члены не охватываются правилами.Но даже Microsoft использует _camelCase для приватных полей в corefx https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md

0 голосов
/ 07 декабря 2018
CustomerLoader.getInstance

Это функция, вы не можете присвоить ее CustomerLoader

Ваш код должен выглядеть примерно так:

class Train
{
    protected Train() { }

    protected static Train instance;

    public static Train GetSingeltonInstance()
    {
        if(instance == null)
        {
            instance = new Train();
        }

        return instance;
    }
}

class TainUser
{
    private readonly Train train;
    public TainUser()
    {
        train = Train.GetSingeltonInstance();
    }
}
0 голосов
/ 07 декабря 2018

Используйте этот пример:

public class Singleton    
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

Singleton()
{
}

public static Singleton Instance
{
    get
    {
        lock (padlock)
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
}
}
  1. Синглтон должен относиться к одному классу, а не к трем.
  2. Будьте осторожны с этим, потому что ваша реализация не поточнобезопасна.Смотрите эту переменную замка здесь.Это предотвращает создание нескольких экземпляров в многопоточных приложениях.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...