Мы не владеем тем, чего мы не понимаем RSS 2.0
 Wednesday, April 23, 2008

Предстаим ситуацию: мы разрабатываем компонент ASP.NET, например color picker. Мы написали JavaScript, который отображает табличку для выбора цвета, и добавили ASP.NET TextBox, в который будет записыватся выбранный цвет. Но нам бы не хотелось позволять пользователю менять значение цвета вручную (да и зачем, у нас и так есть picker, над которым мы так трудились ;)).

И мы ставим у TextBox значение проперти ReadOnly в true. Пришло время использовать наш супер-пикер. Бросаем его на страницу, выбираем цвет, и отправляем форму на сервер, и.. Oh My God! Где же выбранное значение? Почему свойство Text пустое?!

Где-то так было у меня.. Но все от незнания (или от плохой памяти... ).

Вот что говорит MSDN по этому поводу:

The Text value of a TextBox control with the ReadOnly property set to true is sent to the server when a postback occurs, but the server does no processing for a read-only text box. This prevents a malicious user from changing a Text value that is read-only. The value of the Text property is preserved in the view state between postbacks unless modified by server-side code.


Так что будьте на чеку :), чтобы это не стало сюрпризом и не вылилось в несколько часов поисков «а где же мое значение».

Wednesday, April 23, 2008 11:36:20 AM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback

 Friday, April 18, 2008

Наверное уже все, кто использовал Silverlight 1.0, опробовали новые возможности, новые компоненты из Silverlight v2 beta 1. Но когда же ждать final релиза?

Вот приблизительный roadmap (из непроверенных источников J):

We are targeting late Summer

Here is a rough timeline:
Silverlight 2.0 Beta 1 (Q1CY08 with limited (non commercial) Go-Live)
Silverlight 2.0 Beta 2 (Q2CY08 with Go-Live)
Silverlight 2.0 RTM (Summer 2008) – Exact timing TBD

Silverlight v.next – We are working on a v.Next plan and have nothing to announce at this time

Silverlight for mobile – No date available

Friday, April 18, 2008 4:01:09 PM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback
Silverlight
 Tuesday, March 25, 2008

Корпорация Microsoft опубликовала предупреждение для пользователей редактора Word об уязвимости текстового процессора. Используя ее, хакеры могут получить несанкционированный доступ к ПК жертвы и выполнить на нем произвольный код.

Проблема связана с компонентом Jet Database Engine. Он используется в пакете MS Office, в том числе в программах Word и Access. Для осуществления атаки киберпреступник должен создать файл в формате .doc, который при открытии в любой программе, работающей с такими файлами, провоцирует ошибку в msjet40.dll, а она позволяет выполнить произвольный код на ПК. Специалисты Microsoft отмечают эту особенность атаки через файлы .doc как «смягчающие обстоятельства», поскольку злоумышленнику необходимо разместить зараженный файл в Сети и «заставить» жертву скачать его, а затем открыть.

В сообщении компании говорится, что от уязвимости могут пострадать пользователи программ Microsoft Word 2000 SP3, Microsoft Word 2002 SP3, Microsoft Word 2003 SP2, Microsoft Word 2003 SP3, Microsoft Word 2007 и Microsoft Word 2007 SP1, работающих на базе ОС Microsoft Windows 2000, Windows XP или Windows Server 2003 SP1. Проблема не касается версий Windows Server 2003 SP2, Windows Vista и Windows Vista SP1. В данный момент специалисты Microsoft занимаются решением проблемы. О сроках выпуска патча в бюллетене ничего не говорится.

Тем временем, специалисты Microsoft уже сообщили, что знают о первых атаках с помощью данной уязвимости. Однако в корпорации полагают, что риски небольшие, а пользователям до выпуска патча необходимо проявлять осторожность — не скачивать и не открывать файлы в формате .doc с незнакомых или подозрительных веб-ресурсов, а также получаемые по электронной почте от адресатов, не вызывающих доверия.

Tuesday, March 25, 2008 12:36:03 PM (FLE Standard Time, UTC+02:00)  #    Comments [1] - Trackback

 Sunday, March 02, 2008

Содержание:

1. Введение
2. Установка
3. Создание тестов с помощью ArtoOfTest WebAii
4. Конфигурирование тестов
5. Первый тест
6. Работаем с AJAX
7. Поиск элементов и автосгенерированные Id элементов в ASP.NET

Введение

Итак, закомимся – WebAii – framework для автоматизированного тестирования web приложений. Сайт разработчиков: http://www.artoftest.com.
Что же предлагает WebAii:

  • Автоматизация с использованием событий DOM, или вызов событий клавитуры/мыши напрямую (клики, перетаскивание и прокрутка, ввод текста).
  • Подежка приложений Ajax и JavaScript Unit-testing.
  • Возможность поиска элементов на странице с возможностью указания «упрощенных» названий элементов для упрощения поиска их на странице.
  • Реализация DOM-модели в .NET, что дает возможность навигации по элементам из кода тестового модуля.
  • Поддержка NUnit и Visual Studio Team Test шаблонов и расширений.
  • Поддержка visual capturing элементов и состояний браузера.
  • А также многие другие полезные возможности, облегчающие процесс тестирования и написания unit-тестов (TestRegions, HTML popups, frames support, etc).
  • Большое количество примеров использования.

Установка

Для того, чтобы скачать WebAii, необходимо зарегистрироватся у них на форуме. Ну что ж, регистрируемся, качаем. Далее устанавливаем:

Установка проходит простыми нажатиями Next в инсталяторе J.
После установки заглянем в папку, в которую мы поставили WebAii.


Подробно о назначении каждой сборки я расказывать не буду. Просто отмечу что главной сборкой является ArtoOfTest.WebAii.dll, которая является ядром test framework, и в которой собраны такие важные классы, как Settings, Manager, Browser, Find и т. д.
Замечу что в это папке находится add-in для FireFox, который тоже необходимо установить. Откройте FireFox и просто перетяните файл webaii@artoftest.com.xpi в окно FireFox, дождитесь пока станет активной кнопка Install Now и нажмите ее, все, add-in готов к использованию:

Создание тестов с помощью ArtoOfTest WebAii.

В этом примере я раскажу как использовать WebAii в Visual Studio Team Test / Team Suite. Использование WebAii совместно с NUnit описано здесь.
Итак, запускаем Visual Studio, и создаем новый проект теста: File -> New -> Project. В дереве: Visual C# -> Test -> Test Project.

После создания проекта, удаляем все созданные автоматически файлы (мы будем использовать темплейты, которые были установлены, при установке WebAii). Для этого нажимаем правой кнопкой на проекте и выбираем Add -> New Item .. а в появившемся окне ищем WebAii VsUnit Test, даем «человеческое» имя файлу теста и жмем Add.

Все, шаблон «готов к употреблению».
Здесь на минутку остановимся и взглянем на базовый класс нашего Unit Test – BaseVsUnitTest. В нем есть несколько полезных, часто используемых свойств: Manager, Settings, Browser, Desktop, Log, Find, которые используются чаще всего, при этом они уже есть (как видим в базовом классе, и нам не прийдется заботится об их создании/инициализации) .

using ArtOfTest.WebAii.Core;
using System;

namespace ArtOfTest.WebAii.TestTemplates
{
   
public abstract class BaseVsUnitTest 
   

       
protected BaseVsUnitTest(); 
        
       
public Actions Actions { get; } 
       
public Browser ActiveBrowser { get; } 
       
public Desktop Desktop { get; } 
       
public Find Find { get; } 
       
public Log Log { get; } 
       
public Manager Manager { get; } 

       
public void CleanUp(); 
       
public static Settings GetSettings(); 
       
public void Initialize(); 
       
public void Initialize(string logLocation); 
       
public void Initialize(TestContextWriteLine vsWriteLineDelegate); 
       
public void Initialize(Settings settings, TestContextWriteLine vsWriteLineDelegate); 
       
public void Initialize(string logLocation, TestContextWriteLine vsWriteLineDelegate); 
       
public void SetTestMethod(object testObject, string testMethodName); 
   
}
}

Конфигурирование тестов

Вместо того, чтобы конфигурировать тест из кода, в WebAii существует возможность конфигурирования с помощью файла конфигурации App.config. Возьмем за основу ранее созданный проект (или скачиваем его здесь) и добавим к нему файл конфигурации. Жмем правой кнопкой мыши на пректе и выбираем Add -> New Item .. а в диалоге выбираем "Application Configuration File" -> жмем Add.

После чего файл конфигурации будет добавлен в проект. Теперь мы можем добавить секцию конфигурации. Открываем App.config файл. Выглядеть он должен где-то так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

Для начала зарегистрируем конфигурационную секцию WebAii.Settings. Для этого, внутри элемента configuration добаляем новый элемент configSections, в котором регистрируем секцию WebAii.Settings.

<configuration
   
<configSections
       
<section name="WebAii.Settings" type="ArtOfTest.WebAii.Core.SettingsConfigSectionHandler,ArtOfTest.WebAii, Version=1.0.600.0, Culture=neutral, PublicKeyToken=4fd5f65be123776c" /> 
    
</configSections>
</configuration>

А затем добавляем саму конфигурацию (ниже, под элементом /configSections). Всё вместе это должно выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8" ?> 
   
<configuration>
       
<configSections
           
<section name="WebAii.Settings" type="ArtOfTest.WebAii.Core.SettingsConfigSectionHandler,ArtOfTest.WebAii, Version=1.0.600.0, Culture=neutral, PublicKeyToken=4fd5f65be123776c" /> 
       
</configSections
       
<WebAii.Settings 
           
annotateExecution="false" 
            
baseUrl=http://www.testserver.net/ 
           
clientReadyTimeout="50000" 
           
defaultBrowser="InternetExplorer"             
           
enableScriptLogging="false" 
           
enableUILessRequestViewing="false" 
           
executionDelay="0" 
           
executionTimeout="60000" 
           
localWebServer="None" 
           
logLocation="C:\WebAiiLog\" 
           
queryEventLogErrorsOnExit="false" 
           
scriptLoggingPort="8099" 
           
simulatedMouseMoveSpeed="0.5" 
           
webAppPhysicalPath="" />
   
</configuration>

К сожалению, ArtOfTest не поставляет XSD схему для своей секции, следовательно Intellisence отсутствует при редактровании секции WebAii.Settings. Более подробно о свойствах WebAii.Setting можно узнать здесь, я же отмечу наиболее важные/полезные настройки:

  • baseUrl – указывает базовый URL приложения, если эта опция указана, то при использовании методов NavigateTo() надо указывать относительные пути (довольно удобно, если предполагается, что тест должен работать вне зависимости от того, где находится сайт)ю
  • clientReadyTimeout – время ожидания клиента (при тестировании во время разработки на локальном сервере и при прогоне тестов на продакшене, время отклика может оказатся разным).
  • defaultBrowser – Браузер по умолчанию, в котором будет выполнен тест (по умолчанию Internet Explorer).

Первый тест

Пришло время сделать первый тест. Сделаем его очень простым (как делают приложения "Hello, World", когда начинают изучать язык программирования).

Для начала, в метод, помеченный атрибутом [TestInitizalize()] добавим следующий код:

if (Manager.Browsers.Count == 0)

   
Manager.LaunchNewBrowser();
}

Это позволит при запуске каждого теста проверять, существует ли запущенный браузер, и запускать новый, если нет запущенных.
А теперь наш Hello, World.

[TestMethod]
public void FirstTestMethod() 

   
Manager.ActiveBrowser.NavigateTo(http://google.com/); 

    // Insert "Hello, World" to seach field. 
   
HtmlInputText searchField = Find.ByAttributes<HtmlInputText>("name=\"q\""); 
   
searchField.Text = "Hello, World";

    // Find search button and click. 
   
HtmlInputSubmit submit = Find.ByName<HtmlInputSubmit>("btnG"); 
   
submit.Click();

    // Wait till browser gets ready. 
   
Manager.ActiveBrowser.WaitUntilReady(); 
   
HtmlInputText searchField2 = Find.ByAttributes<HtmlInputText>("name=\"q\"");

    Assert.AreEqual(searchField.Text, searchField2.Text);
}

Простой тест, позволяющий проверить, работает ли Google J. Все довольно просто: открываем браузер, открываем страницу поиска Google, ищем поле ввода по имени (name = "q") и кнопку поиска, указываем, что хотим искать "Hello, World", и жмем на кнопку, проверяем, что в поле поиска осталось значение ("Hello, World"), которое мы искали. Пример можно скачать здесь.
А теперь о плохом:
Иногда можно получить следующую ошибку: ArtOfTest.WebAii.Exceptions.ExecuteCommandException
Это по всей видимости проиходит потому, что браузер не готов выполнять посланные команды, в часности, NavigateTo, поэтому, если такое возникает, добавьте в начало теста строку ожидания браузера (пока он не перейдет в состояние ready)
Manager.ActiveBrowser.WaitUntilReady();

Работаем с AJAX

Первое впечатление при попытке подружить WebAii и AJAX было – «не работает». Проверим так ли это. Создадим простое Web-приложение, которое использует ASP.NET AJAX.

Замечание:
В дальнейшем предполагается, что ASP.NET AJAX установлен.
Для этого выбираем File -> Add -> New Web Site. Из предложенных вариантов выбираем ASP.NET AJAX-Enabled Web Site и «поселяем» новый веб-сайт в IIS: выбираем
- Location: HTTP
- Language: Visual C#
- Жмем Browse и создаем приложение/виртуальную директорию, к которой будет находится сайт

Далее, сделаем простой пример с применением AJAX. Это немного выходит за рамки темы даного поста, поэтому чтобы чтобы не делать все описанное ниже, можно просто скачать демо-проект и разместить его в IIS.
Итак, добавим на страницу для начала компонент UpdatePanel (тем самым обеспечив асинхронное обновление части страницы). Внутрь UpdatePanel поместим Label и Button, при клике на последнюю, будем асинхронно обновлять надпись в Label.

Исходный код ASPX (Default.aspx):

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <
title>Untitled Page</title
</head>

<body
   
<form id="form1" runat="server"> 
       
<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
           
<div
               
<asp:UpdatePanel runat="server" ID="demoUpdatePanel"> 
                   
<ContentTemplate
                       
<asp:Label runat="server" ID="lblTitle"></asp:Label
                       
<br /> 
                       
<asp:Button runat="server" ID="btnGo" Text="Press to go!" 
                            OnClick="OnGoButtonClick" /> 
                   
</ContentTemplate
               
</asp:UpdatePanel
           
</div
   
</form>
</body>
</html>

Исходный код code-behind (Default.aspx.cs):

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page

    protected void Page_Load(object sender, EventArgs e) 
   

   


   
protected void OnGoButtonClick(object sender, EventArgs e) 
   

       
this.lblTitle.Text = "Async GO"
    }
}


Вот такое простое web-приложение получилось. Запускаем, жмем кнопку "Press to go!" и убеждаемся, что приложение работает асинхронно, и окно браузера не перерисовается полностью (а только меняется надпись).

Приложение есть, и оно работает используя ASP.NET AJAX. Пришло время протестировать его. Снова воспользуемся ранее созданным проектом BaseWebAiiProject (в котором мы тестировали Google). Открываем файл FirstTest.cs, находим в нем FirstTestMethod() и под ним добавляем следующий метод:

[TestMethod]
public void TestAjaxApplication()

   
Manager.ActiveBrowser.WaitUntilReady();
}

В этот метод будет добавлен код, которым мы проверим, как изменилось состояние надписи после нажатия на кнопку.
Прежде чем написать сам тест, отмечу, что в WebAii, а точнее у класса Actions, существует метод, с помощью которого можно ждать измения состояния элементов страницы – WaitForEment(FindParam, waitTimeout, invertCondition [optional]).
Пример...

[TestMethod]
public void TestAjaxApplication()

   
Manager.ActiveBrowser.WaitUntilReady(); 
   
Manager.ActiveBrowser.NavigateTo("~/TestAjax/Default.aspx"); 

   
// Check intial state. 
   
HtmlSpan label1 = Find.ById<HtmlSpan>("lblTitle"); 
   
Assert.AreEqual(string.Empty, label1.InnerText);

    // Search for "go" button. 
   
HtmlInputSubmit goButton = Find.ByName<HtmlInputSubmit>("btnGo"); 
   
goButton.Click();

    FindParam seachParam = new FindParam("id=\"lblTitle\"", "innerText=\"\"");
    Manager.ActiveBrowser.Actions.WaitForElement(seachParam, 500, true);

    HtmlSpan label2 = Find.ById<HtmlSpan>("lblTitle"); 
   
string text = label2.InnerText; 
   
Assert.AreEqual("Async GO", text);
}

.. и объяснения: для начала находим элемент span (наш asp:Label), и проверяем его innerText, убеждаемся что он равен «», затем нажимаем кнопку и ждем пока изменится состояние описанное в FindParam. Замечу, что в FindParam можно указывать несколько условий, по которым будет производится поиск. В нашем случае – ищем кнопку с id = "lblTitle" и аттрибутом innerText = "". Учитывайте, что WaitForElement будет «ждать» элемент 500ms (столько, сколько ему «сказали» ждать), и по истечению этого периода времени выполнение теста будет продолжено.

Поиск элементов и автосгенерированные Id элементов в ASP.NET.

Учитывая то, что в ASP.NET идентификаторы элементов создаются автоматически, то прямой поиск по id = "myButton" не удастся, т.к. в HTML этот Id для кнопки ASP.NET будет преобразован, например в такой ID: GridView1$ctl07$myButton. Как же делать поиск в таком случае? К сожалению Find.ById не поддерживает регулярные выражения (что бы в значительной мере облегчило жизнь), но существует такой метод как FindCustom, где можно указывать предикаты поиска.
Пример:

[TestMethod]
public void FindCustomTest()

   
Manager.ActiveBrowser.WaitUntilReady(); 
   
Manager.ActiveBrowser.NavigateTo("~/TestAjax/Default.aspx");

    // Original control ID within DOM is GridView1$ctl02$myButton. 
   
IdSearch searchPredicate = new IdSearch("myButton"); 
   
HtmlInputSubmit myButton = Find.ByCustom<HtmlInputSubmit>(searchPredicate.Search); 
   
Assert.AreEqual("Do", myButton.Value); 
}

Далее, если посмотреть в отладчике, на тест с использованием предиката, то можно увидеть следующее

Таким образом, указывая только часть имени и используя предикаты поиска, можно искать элементы с Id, автосгенерированными ASP.NET. Пример, и класс предиката, можно скачать здесь.

На этом пожалуй и все. Happy coding.

Sunday, March 02, 2008 7:42:04 PM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback
.NET | ASP.NET | Testing
 Wednesday, February 27, 2008

Иногда возникает необходимость определить, является ли введенный/выбранный (например, из списка) пользователем год високосным.
В C# все просто:
bool isLeap = DateTime.IsLeapYear(1996);

Но, в JavaScript такого нет, к сожалению. Но вискосный год или нет, можно определить, используя следующую функцию:

function IsLeapYear(year) {
    if(year%4 == 0) {
        if(year%100 == 0) {
            if(year%400 == 0) {
                return true;
            }
            else
                return false;
        }
        else
            return true;
    }
    return false;
}

 

Анализируя функцию, возникает вопрос: а не проще ли сделать year%4 == 0 и получить високосный год. Ответ: нет. Алгоритм вычисления высокосного года немного сложнее (поблагодарим Папу Георгия ХIII). Год считается високосным только в том случае если он делится на 4 без остатка (это мы знаем со школы), но при этом не делится на 100 без остатка, или, если делится на 100, должен делится и на 400 без остатка.

Happy coding.

Wednesday, February 27, 2008 2:17:28 PM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback
JavaScript
 Tuesday, February 19, 2008

С 31 марта 2008 Microsoft перестанет поддерживать 22 сертификационных экзамена, в основном касающихся Windows NT 4.0, Windows 2000 и Exchange Server 2000. Более подробно – здесь.

Tuesday, February 19, 2008 3:02:47 PM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback

 Monday, February 11, 2008

Недавно увидел довольно интересный add-in: SequenceViz для Reflector'a, с помощью которого можно в рефлекторе проматривать диаграммы переходов.
Скачать его можно с CodePlex.

Для установки плагина необходимо распаковать содежимое архива в папку, куда установлен Reflector. После этого в конфигурационный файл Reflector'a необходимо добавить следующие строчки конфигурации плагина (выделенные красным):

После установки и конфигурирования плагина, необходимо добавить его к списку используемых плагинов Reflector'a. Для этого запустите рефлектор, и из меню выберите View -> Add-Ins. В появившемся окне указываем SequenceViz.dll. После этого перезапустите Reflector.
Вероятней всего, что сразу у вас плагин не заработает, т. к. он использует еще одну библиотеку – GnuPlot. Скачиваем ее и ставим. Если при установке путь был изменен на отличный от C:\Program Files\GnuWin32\bin\pic2plot.exe, то необходимо изменить настройку в Reflector.exe.config - <add key="Pic2PlotPath" value="your-path-here" />.

Также, вероятней всего, что вам понадобится Adobe SVG Viewer, без которого диаграммы просто не отображаются.

А теперь пример. Для начала создадим простой пример:


А теперь посмотрим на пример рефлектором, используя SequenceViz.

Небольшое предупреждение: Не удаляйте файл seq.svg, иначе диаграммы рисоватся небудут J.
Have fun!

Monday, February 11, 2008 2:15:38 PM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback
.NET | Visualization

Вышел hotfix для Visual Studio 2008, исправляющий следующие ошибки:

HTML Source view performance

  • Source editor freezes for a few seconds when typing in a page with a custom control that has more than two levels of sub-properties.
  • "View Code" right-click context menu command takes a long time to appear with web application projects.
  • Visual Studio has very slow behavior when opening large HTML documents.
  • Visual Studio has responsiveness issues when working with big HTML files with certain markup.
  • The Tab/Shift-Tab (Indent/Un-indent) operation is slow with large HTML selections.

Design view performance

  • Slow typing in design view with certain page markup configurations.

HTML editing

  • Quotes are not inserted after Class or CssClass attribute even when the option is enabled.
  • Visual Studio crashes when ServiceReference element points back to the current web page.

JavaScript editing

  • When opening a JavaScript file, colorization of the client script is sometimes delayed several seconds.
  • JavaScript IntelliSense does not work if an empty string property is encountered before the current line of editing.
  • JavaScript IntelliSense does not work when jQuery is used.

Web Site build performance

  • Build is very slow when Bin folder contains large number of assemblies and .refresh files with web-site projects.

Скачать можно здесь

Monday, February 11, 2008 11:51:02 AM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback

 Wednesday, January 30, 2008

Набрав в IDE Visual Studio 2005/2008 слово int можно увидеть как int так и Int32 (Int16, Int64).

И тут возникает вопрос (особенно у молодых разработчиков), какая же разница между int и Int32, например.
Скажем так, разницы особо нет никакой, отличие только в том, что int – это alias для System.Int32. Технически в C# разницы нет, потому что int компилятором будет преобразован в Int32.
Например, Рихтер советует использовать именно Int32, т е полные названия типов, а не их алиасы (aliases).


Многие типы FCL имеют методы в имена которых включены имена типов. Например у типа BinaryReader есть методы ReadBoolean ReadInt32 и ReadSingle и т.д. а у типа System.Convert — методы ToBoolean ToInt32 и ToSingle и т.д.

 

Пример:


using System;
namespace ConsoleApplication1
{
   
class Program 
    { 
       
static void Main(string[] args) 
       

            int alias1 = 123; 
           
Int32 alias2 = 345; 
           
Console.WriteLine(alias1); 
           
Console.WriteLine(alias2); 
       

    
}
}

 

Теперь посмотрим на IL это примера:


.method private hidebysig static void Main(string[] args) cil managed

   
.entrypoint 
   
.maxstack
   
.locals init
       
[0] int32 alias1, 
       
[1] int32 alias2) 
    L_0000: ldc.i4.s 0x7b 
   
L_0002: stloc.0 
   
L_0003: ldc.i4 0x159 
   
L_0008: stloc.1 
   
L_0009: ldloc.0 
   
L_000a: call void [mscorlib]System.Console::WriteLine(int32
   
L_000f: ldloc.1 
   
L_0010: call void [mscorlib]System.Console::WriteLine(int32
   
L_0015: ret    
}

 

 

Как видим, обе переменные: alias1 и alias2 являются Int32.
Поэтому, использовать алиасы или полные имена типов – выбор каждого, или же это описано у вас в coding standards, которые приняты при разработке проекта (если таковые имеются).

Примечание:
Компилятор не даст вам создать перечисление (
enum) на основании Int32


P.S.: Лично я использую Int32.

Wednesday, January 30, 2008 2:36:49 PM (FLE Standard Time, UTC+02:00)  #    Comments [0] - Trackback
.NET
Navigation
Archive
<April 2008>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
Blogroll
Visitors:
 
Locations of visitors to this page
My LinkedIn profile:
 
logo
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2010
FLUID
Sign In
Statistics
Total Posts: 20
This Year: 0
This Month: 0
This Week: 0
Comments: 7