class Widget
{
    // Константа
    enum fudgeFactor = 0.2;

    // Разделяемое неизменяемое значение
    static immutable defaultName = "A Widget";

    // Некоторое состояние, определенное для всех экземпляров класса Widget
    string name = defaultName;
    uint width, height;

    // Статический метод
    static double howFudgy()
    {
        return fudgeFactor;
    }

    // Метод
    void changeName(string another)
    {
        name = another;
    }

    // Метод, который нельзя переопределить
    final void quadrupleSize()
    {
        width *= 2;
        height *= 2;
    }
}

unittest
{
    // Обратиться к статическому методу класса Widget
    assert(Widget.howFudgy() == 0.2);
    // Создать экземпляр класса Widget
    auto w = new Widget;
    // Поиграть с объектом типа Widget
    assert(w.name == w.defaultName); // Или Widget.defaultName
    w.changeName("Мой виджет");
    assert(w.name == "Мой виджет");
}
