У меня есть вопрос, действительно ли это - корректный подход для создания Универсальной Singleton?
public class Singleton<T> where T : class, new()
{
private static T instance = null;
private Singleton() { }
public static T Instancia
{
get
{
if (instance == null)
instance = new T();
return instance;
}
}
}
Править:
При проверке некоторого PDFs, который я нашел, универсальная Singleton сделала этот другой путь, это другое корректное?
public class Singleton<T> where T : class, new()
{
Singleton() { }
class SingletonCreator
{
static SingletonCreator() { }
// Private object instantiated with private constructor
internal static readonly T instance = new T();
}
public static T UniqueInstance
{
get { return SingletonCreator.instance; }
}
}
Проблема с общей фабрикой синглтонов заключается в том, что поскольку она является общей, вы не контролируете тип "синглтона", который инстанцируется, поэтому вы никогда не можете гарантировать, что созданный вами экземпляр будет единственным экземпляром в приложении.
Если пользователь может предоставить тип в качестве аргумента общего типа, то он также может создавать экземпляры этого типа. Другими словами, вы не можете создать общую фабрику синглтонов - это подрывает сам паттерн.
Почему бы вам не использовать библиотеки, поставляемые с платформой .NET: http ://msdn.microsoft.com/en-us/library/ms229718.aspx ?
EDIT: 2019 Апрель по https://stackoverflow.com/users/1527/ Этот ответ больше недействителен. Другие ответы одобрены Microsoft.
Они были разработаны корпорацией Майкрософт, которая больше не рекомендует их использовать:
Мы не рекомендуем использовать класс Ftp WebRequest для новой разработки. Дополнительные сведения и альтернативы Ftp WebRequest см. в разделе WebRequest, который не следует использовать в GitHub. ( https ://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest? view = netframework-4.7.2 )
Страница "WebRequest не должна использоваться" в свою очередь указывает на этот вопрос как на окончательный список библиотек!
-121--787308- Поэтому я нашел ответ, после некоторых экспериментов. При добавлении fork = "true"
в задачу javac
дескриптор файла закрывается в конце задачи. Это позволяет моей модификации банка преуспеть позже в построении.
Это, к сожалению, потому что я должен помнить, чтобы добавить это к каждой родительской задачи javac.
-121--3977861-Для общего фрагмента кода, который будет использоваться повторно, следует учитывать безопасность потоков в точке создания экземпляра singleton.
Как бы то ни было, (instance = = null)
может иметь значение true в отдельных потоках.