В меню Nautilus обычно нет удаления. Необходимо активироваться, удаляют путем входа в редактирование наутилуса-> предпочтения-> поведение.
В C # я бы предпочел .Instance
, поскольку он соответствует общим рекомендациям.
Если вы хотите создать синглтон, вы не можете просто возвращать новый объект при каждом вызове GetInstance
или Instance
средства получения свойства. Вы должны сделать что-то вроде этого:
public sealed class Bar
{
private Bar() { }
// this will be initialized only once
private static Bar instance = new Bar();
// Do you prefer a Property?
public static Bar Instance
{
get
{
return instance;
}
}
// or, a Method?
public static Bar GetInstance()
{
return instance;
}
}
И неважно, какой путь вы выберете. Если вы предпочитаете работать со свойствами, выберите его, если вы предпочитаете методы, это тоже подойдет.
Как и практически все, это зависит:)
Если синглтон загружается лениво и представляет собой более чем тривиальный объем работы для создания экземпляра, то GetInstance () более подходит, поскольку вызов метода указывает, что работа выполняется.
Если мы просто маскируем для защиты экземпляра синглтона, предпочтительнее свойство.
Зависит. Вам нужно передать параметры? Если так, я бы сделал GetInstance (). Если нет, то, вероятно, не имеет значения (по крайней мере, с точки зрения вызывающего абонента, поскольку в любом случае это оба метода; однако имеет значение , если вы пытаетесь быть более основанными на стандартах и в в этом случае экземпляр кажется лучше).
Я предпочитаю собственность, это стандартные шаблоны.
Как сказал @Rex, это зависит от семантики, которую вы хотите передать.
GetInstance () не обязательно подразумевает одноэлементный экземпляр. Итак, я бы использовал GetInstance () в случае, когда создание экземпляра происходит по запросу, прямое создание нежелательно, и экземпляр может быть таким же, но не гарантируется, что он будет таким же. Пулы объектов также соответствуют этим критериям. (Фактически, синглтон - это специализация пула объектов с сохранением состояния: -))
Свойство Static Instance, с другой стороны, подразумевает одноэлементный и сохраненный идентификатор экземпляра.
Кстати, как @RaYell упомянул ваш пример кода не является синглтоном, поэтому вам не следует использовать свойство Instance. В этом случае вы все равно можете использовать метод GetInstance (), поскольку он будет служить фабрикой экземпляров.
public class Singleton
{
private volatile static Singleton uniqueInstance;
private static readonly object padlock = new object();
private Singleton() { }
public static Singleton getInstance()
{
if (uniqueInstance == null)
{
lock (padlock)
{
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
В приведенном выше коде реализована двойная проверка, сначала проверяется, создан ли экземпляр, а если нет - блокировка был установлен. Один раз в этом блоке
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
, если экземпляр равен нулю, создайте его.
Кроме того, переменная uniqueInstance объявляется изменчивой, чтобы гарантировать, что присвоение переменной экземпляра завершится до того, как переменная экземпляра станет доступной.