Интересно о C#: возможности, которые мы редко используем

понедельник, 1 марта 2010, Александр Краковецкий

Мне нравится, что данная рубрика находит своего читателя. Также мне нравится, что вы критикуете материал, указываете на ошибки и тем самым заставляете заново переосмысливать написанное. Значит, мы на правильном пути.

Сегодня поговорим о тех возможностях языка, которые мы используем редко или вообще о них не догадываемся, но они есть (с). Это материал из C# basics, но тем не менее, будет полезен каждому, кто программирует на C#.

switch

Кроме привычного break для выхода из switch можно также использовать return, throw и даже goto:

switch(value)
{
    case 0:
        //do something
        break;
    case 1:
        //do something
        return;
    case 2:
        //do something
        throw new ArgumentException();
    case 3:
        //do something
        goto case 0;
    default:
        break;
}

Class для имени класса

Известно, что вы не можете называть переменные именами зарезервированных слов, например class или delegate. Но на самом деле это возможно - для этого необходимо перед названием добавить символ "@":

class @class 
{
    public string @delegate { get; set; }
}

А потом написать в коде:

@class c = new @class();
c.@delegate = "some cool value";

Сделано это потому, что в разных .NET языках присутствуют разные зарезервированных слова, поэтому такая возможность добавлена для нормального вызова кода написанного, например на C# из VB.NET проектов, и наоборот.

Ключевые слова checked и unchecked

Выражение или блок, помеченный как checked будет проверять контекст, соответственно unchecked будет его игнорировать.

Следующий пример выдаст OverflowException:

short x = short.MaxValue;
short y = short.MaxValue;

short z = checked((short)(x + y));

А этот вернет -2:

short x = short.MaxValue;
short y = short.MaxValue;

short z = unchecked((short)(x + y));

Значения по умолчанию и default

Не смотря на то, что значения по умолчанию запомнить достаточно легко (для численных типов - 0, ссылочных - null, для bool - false), C# имеет возможность задать это значение с помощью default:

int i = default(int); // 0
bool b = default(bool); // false
DateTime t = default(DateTime); // 01.01.0001 0:00:00

Как часто вы используете вышеперечисленные возможности?


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

Комментарии

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