ялабуми™

Разработчик. Всесторонний.

Archive for the ‘C#’ Category

ExpandoObject или «Зачем из C# делают динамически типизированный язык?»

без комментариев

Сейчас в Visual C# Highlights последним постом висит «Introducing the Expando Object». Это, наверное, третий или четвертый пост про DLR (Dynamic Language Runtime), но лично для меня самый пугающий.
Посмотрим на пример (кстати, не так давно я описывал «Enumerator в Python»):

dynamic contact = new ExpandoObject();
contact.Name = "Alexander Shvetsov";
contact.Location = "Moscow, Russian Federation";

Прочтите эту запись до конца »

Написано Alexander Shvetsov

Октябрь 6, 2009 в 15:51

Опубликовано в C#, Programming

Разные модификаторы для get и set в C#

без комментариев

Отнють нетривиальным можно назвать возможность выставлять различные модификаторы доступа для get и set в свойствах. Все очень просто, а между тем и очень полезно.

public string Name
{
    get { return this.name; }
    internal set { this.name = value; }
}

Update: Жаль, нельзя так же определять свойства в интерфейсах.

Написано Alexander Shvetsov

Август 25, 2009 в 10:17

Опубликовано в C#, Programming

Url Routing в ASP.NET

без комментариев

Сейчас достаточно популярен фреймворк ASP.NET MVC. Сам по себе «паттерн» MVC достаточно интересен, но не всегда применим. Конечно же он накладывает множество ограничений и на разработчика, и на приложение. Но ведь иногда можно почерпнуть отдельную часть, без ущерба для кого-либо, в данном случае это механизм URL роутинга, который всемте с .Net 3.5 SP1 вошел во фрэймворк в виде неймспейса System.Web.Routing.
Прочтите эту запись до конца »

Написано Alexander Shvetsov

Август 10, 2009 в 15:27

Опубликовано в C#, Programming

Удобный дебаггинг в C#

без комментариев

Просматривая нэймспейс System.Diagnostics, обнаружил много интересного, но самым интересным показался аттрибут DebuggerStepThroughAttribute. Сегодня же, нашел интересный пост посвященный тому, как применять этот аттрибут к свойствам (очень неочевидно, но логично):

public object MyProperty {
    [DebuggerStepThrough]
    get { return this.myobject; }
}

В результате же на таком вызове мы не будем проваливаться в геттер:

object one = two.MyProperty;

Написано Alexander Shvetsov

Август 6, 2009 в 22:15

Опубликовано в C#, Programming

Получение схемы базы MSSQL в C#

без комментариев

По запросу «mssql tables list c#» в Google первым результатом идет вариант с SQL запросом, использующим системный view INFORMATION_SCHEMA.Tables:

SELECT
    table_name as [Name]
FROM
    INFORMATION_SCHEMA.Tables
WHERE
    TABLE_TYPE = 'BASE TABLE'

В действительности, этот вариант отнють не самый удобный. Попробовав разобраться сам, я быстро нашел метод GetSchema() и именно его теперь использую:

DataTable columns = connection.GetSchema("Columns");

На выходе получаем всю необходимую информацию, а главным образом TABLE_NAME, COLUMN_NAME и DATA_TYPE.

Написано Alexander Shvetsov

Июль 31, 2009 в 19:36

Опубликовано в C#, Programming

Отмечено как

Производительность is и as в C#

без комментариев

В данный момент я работаю над компонентом, в котором для сериализации больших структур используется много кастов. То что кастинг (оператор ()) медленнее чем оператор as написано много статей, если быть кратким, то этот прирост производительности получается засчет того, что as в случае неправильного кастинга возвращает null, в то время как () выбрасывает exception. Я же приведу результат небольшого исследования производительности is и as.
Прочтите эту запись до конца »

Написано Alexander Shvetsov

Июль 31, 2009 в 03:29

Опубликовано в C#, Programming

Отмечено как

Enumerator и хранение прав доступа

без комментариев

В Linux-подобных системах для определения прав доступа, используются паттерны rwx для владельца (owner), группы (group) и всех (all), таким образом получается последовательность вида rwx-rwx-rwx, которая однозначно может быть определена бинарной последовательностью, а в итоге чем-то вроде 777, 555 или 577, что очень легко читается и воспринимается.

Вышеописанная схема натолкнула меня на мысль об использовании подобной схемы в C# с енумераторами (enums) для определения прав доступа к чему-либо. Итак, начнем по порядку. Создадим енумератор:

public enum AccessLevel : int
{
    Read = 1,
    Write = 2,
    Execute = 4
}

Прочтите эту запись до конца »

Написано Alexander Shvetsov

Июль 29, 2009 в 03:00

Опубликовано в C#, Programming

«Hello World!» на родном языке блога

без комментариев

using System;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Написано Alexander Shvetsov

Июль 28, 2009 в 12:00

Опубликовано в C#, Programming