powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему не работает конструктор класса ?
7 сообщений из 7, страница 1 из 1
Почему не работает конструктор класса ?
    #32789789
vashkovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть простенький класс
автор
public class ELog
{

static StreamWriter file ;
static ELog()
{
string path = @"C:\ELog.log";
FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
StreamWriter file = new StreamWriter(path,true);
file.AutoFlush = true ;
}


public void OutString( string _str )
{
file.WriteLine( @"log: " + DateTime.Now.ToShortDateString());
file.WriteLine( _str );
file.Close();
}
}


При выполнении вылетает ошибка :
Object reference not set to an instance of an object

Оно и понятно т.к в отладчике мы ни разу в конструктор не попали :((

заменяем на
автор
public class ELog
{

static StreamWriter file = new StreamWriter(@"C:\ELog.log",true);

static ELog()
{ }
public void OutString( string _str )
{
file.WriteLine( @"log: " + DateTime.Now.ToShortDateString());
file.WriteLine( _str );
file.Close();
}
}


и все отлично работает.
Из-за чего это происходит, руки крывые или что ?

в основном классе прописано

public class Service1 : System.EnterpriseServices.ServicedComponent
{
public static ELog Log = new ELog();
........
public class ELog // : System.IO // .TextWriter
{
.......
}
}
...
Рейтинг: 0 / 0
Почему не работает конструктор класса ?
    #32789872
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вы конструктор static сделали, а экземпляр объекта ELog создаете ?
Сделайте конструктор public
...
Рейтинг: 0 / 0
Почему не работает конструктор класса ?
    #32789907
vashkovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При замене

private class ELog
{
static StreamWriter fl = new StreamWriter(@"C:\ELog_Client.log",true);
static ELog()
....

на
private class ELog
{
static StreamWriter fl ;
public ELog()
...

при компиляции выдается ошибка
ClientV7\Form1.cs(295): Field 'ClientV7.Form1.ELog.fl' is never assigned to, and will always have its default value null

и при выполнении вылетает ошибка с Object reference

Переменная инициализируется в InitializeComponent()
...
Рейтинг: 0 / 0
Почему не работает конструктор класса ?
    #32789939
vashkovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вызываю при закрытии формы:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Log.OutString(@" Form1_Closing ");
}
...
Рейтинг: 0 / 0
Почему не работает конструктор класса ?
    #32789942
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vashkovich
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class ELog 
{
static StreamWriter file ; // никаких значений сюда НЕ ПОПАДАЕТ
static ELog()
{
  string path = @"C:\ELog.log";
  FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write,   FileShare.ReadWrite);
    StreamWriter file = new StreamWriter(path,true);
  file.AutoFlush = true ;
}
}
ты действительно не присваиваешь полю file класса никакого значения. в выделенной строке file - это лок. переменная, определенная в конструкторе
...
Рейтинг: 0 / 0
Почему не работает конструктор класса ?
    #32789954
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vashkovichПри замене

private class ELog
{
static StreamWriter fl = new StreamWriter(@"C:\ELog_Client.log",true);
static ELog()
....

на
private class ELog
{
static StreamWriter fl ;
public ELog()
...

при компиляции выдается ошибка
ClientV7\Form1.cs(295): Field 'ClientV7.Form1.ELog.fl' is never assigned to, and will always have its default value null

и при выполнении вылетает ошибка с Object reference

Переменная инициализируется в InitializeComponent()
Правильно.
Вы же написали static StreamWriter fl ; и потом нигде ее не поинициализировали
Напишите так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public class ELog 
{

private StreamWriter file ; 
public ELog()
{
string path = @"C:\ELog.log";
FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
StreamWriter file = new StreamWriter(path,true);
file.AutoFlush = true ;
}


public void OutString( string _str )
{
file.WriteLine( @"log: " + DateTime.Now.ToShortDateString());
file.WriteLine( _str );
file.Close();
}
}
//в основном классе
public class Service1 : System.EnterpriseServices.ServicedComponent
{
private static _log ELog;
		public static ELog Log
		{
			get 
			{ 
				if (_log==null)
				{
					_log=new ELog(); 
				}
				return _log;
			}
		}

...
Рейтинг: 0 / 0
Почему не работает конструктор класса ?
    #32789964
vashkovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы !
буду пробовать !
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему не работает конструктор класса ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]