суббота, 16 мая 2009 г.

Null Object и синтаксический сахар C#

public interface Null
{
}

internal class NullWord : Word, Null
{
}

if(word is Null)

Без комментариев. Красотища! :)

Использованы паттерны: NullObject и Marker Interface

Подробнее: http://agile.rpod.ru/109024.html

1 комментарий:

  1. Добится подобного эффекта можно с помощью extension methods.

    Например:

    public class Word {}

    public static class WordExtension {
    public static bool isNull(this Word word) {
    return word == null;
    }
    }

    // ... некий код ...
    Word word = ...;
    if (word.isNull) {
    // ... некий код обработки ошибки ...
    } else {
    // ... некий код нормального выполнения...
    }


    Второй вариант, который я больше предпочитаю:
    class NullWord : Word {
    // перегрузка методов, так чтобы они
    // ничего не делали, что может повредить
    // нормальные объекты, БД или память
    }

    Bспользование еще проще:
    Word word = ...
    word.any_method_here();

    ----
    С уважением, Вячеслав.

    ОтветитьУдалить