Я пишу класс слушателя, который создает единственный HttpListener на случайном неиспользуемом порту и прослушивает его. Я попытался сделать это синглтон. Однако мне с трудом удерживать этот одноэлементный объект null
при прослушивании случайному порту HTTP с ошибкой 10 раз.Элементы экземпляра одноэлементного объекта или статические члены класса
(.. Я показал, номер порта и HttpListener экземпляра в качестве членов одноплодной экземпляра Однако есть много других членов, которые я не показаны для простоты) Это мой код:
class Listener
{
private static Listener listener = null; //singleton instance
//member variables
private HttpListener httpListener = null;
private int port = -1;
static Listener()
{
listener = new Listener();
}
private Listener()
{
try
{
port = //randomly generate
httpListener = new HttpListener();
//start listening
}
catch(Exception ex)
{
//cant listen on randomly chosen port
listener = null;
httpListener = null;
port = -1;
return;
}
}
}
Однако внутри catch()
, listener = null
устанавливает listener
на нуль только на время. Когда конструктор по умолчанию возвращает его, возвращается новый экземпляр Listener
, поэтому listener
внутри статического конструктора всегда имеет назначенный ему экземпляр . Таким образом, вместо listener = null
внутри стандартного конструктор должен быть this = null
, что является недопустимым.
Таким образом, я переместил весь код внутри статического конструктора. Но это forcesd меня
- Либо делают члены экземпляра (
port
иhttpListener
)static
или или использовать
listener.port
,listener.httpListener
вездекласс Слушатель { частных статических Слушатель Слушатель = NULL; // одноточечно экземпляр
//member variables private HttpListener httpListener = null; private int port = -1; static Listener() { listener = new Listener(); try { listener.port = //randomly generate listener.httpListener = new HttpListener(); //start listening } catch(Exception ex) { //cant listen on randomly chosen port listener = null; return; } } private Listener() { }
}
Я не понимаю
Q1 ли сделать port
& httpListener
static
? (Это я несколько против принципов ООП) или
Q2 следует ли хранить их в качестве экземпляров и использовать listener.
везде? (Это проблематично, поскольку в моем фактическом коде есть много таких членов и методов, и я должен приложить listener.
)
Или я думаю, что все неправильно, и следовало бы по-другому?
Вы пытаетесь взломать порт? – Fendy
[почему одинокие люди злы] (http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx). Это действительно не похоже на то, что вы описываете, что вам нужен синглтон. – BartoszKP
@BartoszKP ohkay ... что здесь не так? – Mahesha999