2015-03-20 2 views
1

Я просто изучаю Singleton, чтобы углубить свои знания об этом.Почему, несмотря на наличие частного конструктора, он использует SEALED в классе в MSDN

Я столкнулся с MSDN, что он использует SEALED и заявляет, что мы не можем получить дальнейший результат и, следовательно, не можем создать экземпляр сумерек, когда наша цель является одиночной. Согласен.

Однако я вижу, что для предотвращения деривации уже существует частный конструктор, так как, когда я пробовал его в VS, он говорит о недоступности из-за уровня защиты, достаточно справедливого. Поэтому я считаю, что это само по себе решает проблему отказа от деривации. Почему запечатан? Почему именно в документе они написали, что Sealed используется для достижения этого, когда они ничего не говорили о частном конструкторе для этой цели?

Мне действительно интересно, поскольку я нахожусь в кривой обучения. Пожалуйста помоги.

Это то, что MSDN статья имеет:

public sealed class Singleton 
{ 
    private static readonly Singleton instance = new Singleton(); 

    private Singleton(){} 

    public static Singleton Instance 
    { 
     get 
     { 
     return instance; 
     } 
    } 
} 

и веб-сайт, я имею в виду это:

https://msdn.microsoft.com/en-us/library/ff650316.aspx

ответ

4

Потому что, если вы использовали вложенный класс, который вы могли наследовать от родителя класса и предоставить общественный конструктор, подобный этому ...

public class Parent 
{ 
    private Parent(){} 

    public class Child : Parent 
    { 
     public Child() {} 
    } 
} 

Теперь вы можете это сделать ...

var child = new Parent.Child(); 

Это разрушает шаблон Singleton. Добавление модификатора sealed предотвращает это.

+0

Чистка, спасибо вам, справедливо, но почему я даже кодирую подкласс в классе, который реализует Singleton? Есть ли сценарий реального времени, в котором я могу извлечь выгоду из такого стиля кодирования? В противном случае я полностью согласен с вами. Пожалуйста, помогите мне, просто любопытно и положительно обсудите :) – Learner

+1

Возможно, вы бы этого не сделали, но разработчик, с которым вы работаете, может не понять, почему он не должен. – Shoe

+0

Спасибо :) Один маленький вопрос; почему они используют readonly здесь? Хотя я знаю смысл readonly, но не мог понять, почему они хотят использовать его здесь, или это то, что мы не можем достичь singleton, используя тот же код, не используя readonly здесь? – Learner

Смежные вопросы