Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как корректно очистить свойство. / 14 сообщений из 14, страница 1 из 1
29.09.2016, 10:41
    #39317591
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
Здравствуйте! Столкнулся с проблемой, нужно свойство установить в null я сделал:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public DataAccessLayer DataAccessLayer
        {
            get
            {
                if (this.m_dataAccessLayer != null)
                {
                    this.m_dataAccessLayer = null;
                }
                if (this.m_dataAccessLayer == null)
                {
                    this.m_dataAccessLayer = new DataAccessLayer();
                }
                return this.m_dataAccessLayer;
            }
        }


Вопрос не происходит ли переполнение стека?
...
Рейтинг: 0 / 0
29.09.2016, 10:45
    #39317599
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
Это какое-то порно: если не пусто, то сделать пусто и затем создать новый.
...
Рейтинг: 0 / 0
29.09.2016, 10:49
    #39317604
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
son456, нет. ваш код эквивалентен:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public DataAccessLayer DataAccessLayer
        {
            get
            {
                    this.m_dataAccessLayer = new DataAccessLayer();
                    return this.m_dataAccessLayer;
            }
        }



В общем - ерунда полная... Сделайте метод... Reset/Clear/Close... добавте set, если это позволяет ваш, п Г, высокАй дизайн.
Напишите сперва без извратов - просто, чтоб работало... Потом уж изгаляйтесь...
...
Рейтинг: 0 / 0
29.09.2016, 10:51
    #39317606
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
Твой код эквивалентен такому
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public DataAccessLayer DataAccessLayer
        {
            get
            {
                this.m_dataAccessLayer = new DataAccessLayer();
                return this.m_dataAccessLayer;
            }
        }
...
Рейтинг: 0 / 0
29.09.2016, 11:13
    #39317631
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
son456Вопрос не происходит ли переполнение стека?

Чё мелочиться?

Код: c#
1.
2.
3.
4.
5.
6.
7.
        public DataAccessLayer DataAccessLayer
        {
            get
            {
                return new DataAccessLayer();                
            }
        }
...
Рейтинг: 0 / 0
29.09.2016, 11:32
    #39317662
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
Можно ли как-то здесь использовать деструктор, если можно то как это сделать?
...
Рейтинг: 0 / 0
29.09.2016, 11:38
    #39317677
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
Если можно напишите что почитать чтоб избавится от такого кода?
...
Рейтинг: 0 / 0
29.09.2016, 12:01
    #39317700
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
son456Можно ли как-то здесь использовать деструктор, если можно то как это сделать?
В C# нет деструкторов, только финализаторы. Если тебе надо очистить поле при завершении работы с объектом, то это делают не в get() а прописывают интерфейс IDisposable
son456Если можно напишите что почитать чтоб избавится от такого кода?
Любую книгу по основам C#. Рихтера например.
...
Рейтинг: 0 / 0
29.09.2016, 12:10
    #39317706
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
Dima TЕсли тебе надо очистить поле при завершении работы с объектом, то это делают не в get() а прописывают интерфейс IDisposable
Disposable вполне может быть вызван и в геттере (да где угодно), если объект имплементит IDisposable. Другой вопрос - нужно ли здесь вообще что-то диспозить. Поскольку, как известно, IDisposable.Dispose() предназначен для освобождения неуправляемых ресурсов (а вовсе не просто для очистки полей) - а эти неуправляемые ресурсы у ТС вообще имеются? есть некий DataAccessLayer, что у которого внутри - неизвестно.
...
Рейтинг: 0 / 0
29.09.2016, 12:29
    #39317723
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
son456Можно ли как-то здесь использовать деструктор, если можно то как это сделать?

Код: c#
1.
2.
3.
4.
5.
6.
using(some.CreateDataAccessLayer())
{

    // ...

}



А вообще, гугли в сторону Dependency Injection и, например, Autofac
...
Рейтинг: 0 / 0
29.09.2016, 12:43
    #39317734
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
hVosttson456Можно ли как-то здесь использовать деструктор, если можно то как это сделать?

Код: c#
1.
2.
3.
4.
5.
6.
using(some.CreateDataAccessLayer())
{

    // ...

}



А вообще, гугли в сторону Dependency Injection и, например, Autofac

Кажется, с таким уровнем рановато про DI читать
...
Рейтинг: 0 / 0
29.09.2016, 12:46
    #39317739
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
PallarisКажется, с таким уровнем рановато про DI читать

Дорога в тысячу ли начинается с первого шага... главное знать верное направление
...
Рейтинг: 0 / 0
29.09.2016, 15:41
    #39317948
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
Сон Веры ПавловныПоскольку, как известно, IDisposable.Dispose() предназначен для освобождения неуправляемых ресурсов (а вовсе не просто для очистки полей) - а эти неуправляемые ресурсы у ТС вообще имеются? есть некий DataAccessLayer, что у которого внутри - неизвестно.
Хм.
А какого рожна IObservable<T>.Subscribe возвращает IDisposable? :)
...
Рейтинг: 0 / 0
29.09.2016, 16:23
    #39318000
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно очистить свойство.
ЕвгенийВСон Веры ПавловныПоскольку, как известно, IDisposable.Dispose() предназначен для освобождения неуправляемых ресурсов (а вовсе не просто для очистки полей) - а эти неуправляемые ресурсы у ТС вообще имеются? есть некий DataAccessLayer, что у которого внутри - неизвестно.
Хм.
А какого рожна IObservable<T>.Subscribe возвращает IDisposable? :)
Сильно подозреваю, что разработчикам очень уж захотелось отписываться по выходу из using. Но идеологически такой подход неправилен, т.к. сам же талмуд и гласит , что
The primary use of this interface is to release unmanaged resources.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как корректно очистить свойство. / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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