|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
У меня в классе несколько событий. Каждое из которых вызывается в нескольких местах этого класса. Постоянно пишу эту проверку на !null и одни и те же аргументы: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Мне несколько раз говорили, то пишу код как начинающий. Как профи пишут? Они то ли эту проверку в другое место пихают, то ли ещё что-то делают.. Пытался найти статейки на тему "как выглядит код работы с событиями у профессионалов" или "как грамотно работать с событиями" - да не нашёл. Если кто скинет ссылку полезную - будет здорово! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 05:41 |
|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
Charles Weyland, Код: c# 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.09.2016, 05:58 |
|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
Charles Weyland, в c# 6 ещё можно так Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 06:00 |
|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
Про доп.проверку огромное спасибо, не учёл, мог напороться в дальнейшем использовании объекта. Ещё вопрос в тему - в дочернем классе не могу подписаться на событие базового класса. Есть заголовок Код: c# 1. 2. 3. 4.
А в наследуемых классах не удаётся подписаться на это событие Код: c# 1. 2. 3. 4.
Сдаётся мне, сказывается нехватка знаний по делегатам.. штудирую статью . Но если подскажете, информация будет полезной. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 06:18 |
|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
hVosttCharles Weyland, в c# 6 ещё можно так Код: c# 1. 2. 3. 4. 5. 6.
Офигеть!))) Блин, надо обновлять студию! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 06:19 |
|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
Charles Weyland, если память не изменяет, ( давно не писал на с# - стал забывать) так если событие инициализировать пустой фуйней = {}; то можно вызывать без проверки.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 08:30 |
|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
Charles Weyland, Еще раз. Русским по белому. Читайте Рихтера. Там всё это расписано: Chapter 11 Events, Part Designing A Type That Exposed an Event, Step#3 Define a method responsible for raising the event to notify registered objects that the event has occurred Код: c# 1. 2. 3. 4. 5.
The thinking here is that a reference to NewMail is copied into a temporary variable, temp, which refers to the chain of delegates at the moment the assignment is performed. Now, this method compares temp and null and invokes temp, so it doesn’t matter if another thread changes NewMail after the assignment to temp. Remember that delegates are immutable and this is why this technique works in theory. However, what a lot of developers don’t realize is that this code could be optimized by the compiler to remove the local temp variable entirely. If this happens, this version of the code is identical to the first version, so a NullReferenceException is still possible. To really fix this code, you should rewrite OnNewMail like the following. Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 11:40 |
|
События в C#. Можно как-то короче писать "if(a) a()"?
|
|||
---|---|---|---|
#18+
Charles WeylandПро доп.проверку огромное спасибо, не учёл, мог напороться в дальнейшем использовании объекта. Ещё вопрос в тему - в дочернем классе не могу подписаться на событие базового класса. Есть заголовок Код: c# 1. 2. 3. 4.
А в наследуемых классах не удаётся подписаться на это событие Код: c# 1. 2. 3. 4.
Сдаётся мне, сказывается нехватка знаний по делегатам.. штудирую статью . Но если подскажете, информация будет полезной. Во я фигнищщу то сморозил, под утро пытаясь что-то запрограммировать ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2016, 14:52 |
|
|
start [/forum/topic.php?fid=20&msg=39315038&tid=1400337]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 168ms |
0 / 0 |