Интересные возможности C# и ASP.NET

вторник, 17 августа 2010, Александр Краковецкий

В этой статье собраны небольшие, но интересные возможности языка 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 байт для того, чтобы всеми любимый браузер (угадайте, какой?) смог отобразить файл корректно.

Вот такой файл советует у себя в блоге Скотт Гатри:

    Site Under Construction

   

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 Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии