Интересные возможности C# и ASP.NET
В этой статье собраны небольшие, но интересные возможности языка C# и технологии ASP.NET.
C#: проверка event handlers на null
Добавление пустого делегата при объявлении event позволяет не использовать проверку на null при вызове event handler.
Пример:
<code>public delegate void MyClickHandler(object sender, string myValue);<br />public event MyClickHandler Click = delegate {}; // add empty delegate!<br /></code>
Теперь можно писать таким образом
<code>public void DoSomething()<br />{<br /> Click(this, "foo");<br />}<br /></code>
вместо:
<code>public void DoSomething()<br />{<br /> // Unnecessary!<br /> MyClickHandler click = Click;<br /> if (click != null) // Unnecessary! <br /> {<br /> click(this, "foo");<br /> }<br />}<br /></code>
Также можно почитать обсуждение и пост Эрика Липперта для более детальной информации.
P.S. Если вам принципиальна производительность кода, то лучше все таки использовать классический код.
ASP.NET: тестирование отправки email
В процессе тестирования можно "отправлять" письма в папку, а не на SMTP сервер. Для этого необходимо в web.config прописать:
<code><system.net><br /> <mailSettings><br /> <smtp deliveryMethod="SpecifiedPickupDirectory"><br /> <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" /><br /> </smtp><br /> </mailSettings><br /></system.net><br /></code>
ASP.NET: app_offline.html
Если вы поместите файл app_offline.html в корень вашего веб-приложения, то ASP.NET 2.0+ остановит приложение и будет показывать этот файл для всех новых запросов. Это самый простой и быстрый способ для того, чтобы вывести на экран сообщение типа "Site Temporarily Unavailable" в то время, когда вы выполняете некие действия на сервере.
Также убедитесь, что размер файла, как минимум, 512 байт для того, чтобы всеми любимый браузер (угадайте, какой?) смог отобразить файл корректно.
Вот такой файл советует у себя в блоге Скотт Гатри:
Under Construction
Gone to Florida for the sun...
Также этот файл можно наблюдать в процессе публикации (publish) сайта.
ASP.NET: Управление трассировкой в коде
Трассировкой можно управлять с помощью кода, например:
<code>#ifdef DEBUG <br /> if (Context.Request.QueryString["DoTrace"] == "true")<br /> {<br /> Trace.IsEnabled = true;<br /> Trace.Write("Application:TraceStarted");<br /> }<br />#endif<br /></code>
ASP.NET: Intellisense для MasterPages
Для того, чтобы Intellisense работал в *.aspx страницах для эталонных страниц (master pages), а также были доступно свойство Master, необходимо в директивах страницы прописать MasterType:
<code><%@ MasterType VirtualPath="~/Masters/MyMainMasterPage.master" %><br /></code>
или
<code><%@ MasterType TypeName="MyMainMasterPage" %><br /></code>
ASP.NET: Ускорение процесса компиляции (ASP.NET 3.5 SP1+)
В ASP.NET 3.5SP1 была добавлена возможность более быстрой компиляции (более детально можно почитать здесь):
<code><compilation optimizeCompilations="true"><br /></code>
Quick summary: we are introducing a new optimizeCompilations switch in ASP.NET that can greatly improve the compilation speed in some scenarios. There are some catches, so read on for more details. This switch is currently available as a QFE for 3.5SP1, and will be part of VS 2010.
The ASP.NET compilation system takes a very conservative approach which causes it to wipe out any previous work that it has done any time a ‘top level’ file changes. ‘Top level’ files include anything in bin and App_Code, as well as global.asax. While this works fine for small apps, it becomes nearly unusable for very large apps. E.g. a customer was running into a case where it was taking 10 minutes to refresh a page after making any change to a ‘bin’ assembly.
To ease the pain, we added an ‘optimized’ compilation mode which takes a much less conservative approach to recompilation.
ASP.NET: прячем содержимое от роботов
Иногда необходимо спрятать некий контент от роботов и ботов. Это можно сделать таким образом:
<code>if (Request.Browser.Crawler){<br /> HideArticleComments();<br /></code>
ASP.NET: проверить, или приложение работает локально
Для этого можно воспользоваться свойством Request.IsLocal:
<code>if( Request.IsLocal )<br />{<br /> Action1();<br />}<br />else<br />{<br /> Action2();<br />}<br /></code>
ASP.NET: свойство MaintainScrollPositionOnPostBack
Если вы хотите, чтобы после postback пользователь был отскролирован в ту же позицию, где был до postback, то необходимо выставить свойство страницы MaintainScrollPositionOnPostBack в true:
<asp:Page MaintainScrollPositionOnPostBack="True|False" />
При подготовке статьи были использованы материалы с интернетов и stackoverflow. А какие вы знаете интересные особенности языка C# и любимых технологий?
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |