Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему не работает конструктор класса ? / 7 сообщений из 7, страница 1 из 1
18.11.2004, 17:01
    #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
18.11.2004, 17:25
    #32789872
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конструктор класса ?
А зачем вы конструктор static сделали, а экземпляр объекта ELog создаете ?
Сделайте конструктор public
...
Рейтинг: 0 / 0
18.11.2004, 17:38
    #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
18.11.2004, 17:48
    #32789939
vashkovich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конструктор класса ?
вызываю при закрытии формы:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Log.OutString(@" Form1_Closing ");
}
...
Рейтинг: 0 / 0
18.11.2004, 17:48
    #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
18.11.2004, 17:53
    #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
18.11.2004, 17:57
    #32789964
vashkovich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конструктор класса ?
Спасибо за советы !
буду пробовать !
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему не работает конструктор класса ? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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