Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статический констуктор абстрактного класса, зачем он может понадобиться? 
V
    Опции темы
ДобренькийПапаша
Дата 9.3.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



САБЖ.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
alexvs11
Дата 9.3.2011, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: нет
Всего: 10



синглтон, виртуальный конструктор
PM MAIL   Вверх
ДобренькийПапаша
Дата 10.3.2011, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Нужен пример кода в котором будет задействован статический конструктор абстрактного класса, если можно.
Не припоминаю, чтобы в синглтоне использовался абстрактный класс (может я что-то забыл, но я его не так реализовывал).
А виртуальный конструктор вообще создать не возможно (или я что-то путаю?)

Это сообщение отредактировал(а) ДобренькийПапаша - 10.3.2011, 00:45


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Voyager
Дата 10.3.2011, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Абстрактный класс - тот-же класс, для чего используются cctor в неабстрактных классах, для того-же может использоваться cctor и в абстрактном классе.
PM   Вверх
KelTron
Дата 10.3.2011, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Ну если в классе есть статические члены, то их можно проинициализировать в статическом конструкторе..) Экземпляр абстрактного класса создать нельзя, но для доступа к статикам это и не надо.
Цитата(ДобренькийПапаша @  10.3.2011,  05:39 Найти цитируемый пост)
Не припоминаю, чтобы в синглтоне использовался абстрактный класс (может я что-то забыл, но я его не так реализовывал).

Ну а в ввиде статического класса припоминаешь?)
Код

static class AAA

это и есть абстрактный класс с запретом наследования, т.е. по сути это
Код

sealed abstract class AAA




--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
-Mikle-
Дата 10.3.2011, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



вот вам сочинение:

Код

    public abstract class BookProvider
    {
        static BookProvider()
        {
            _availableProviders = new Dictionary<string, BookProvider>();

            _availableProviders.Add("bookProvider1", new InternalBookProvider());
            _availableProviders.Add("bookProvider2", new ExtendedBookProvider());

            foreach (var item in _availableProviders)
                item.Value.Init();
        }

        private static Dictionary<string, BookProvider> _availableProviders;
        public static Dictionary<string, BookProvider> AvailableProviders { get { return _availableProviders; } }

        public virtual void Init() { }
        public abstract string Description { get; }
    }

    internal class InternalBookProvider : BookProvider
    {
        public override string Description { get { return "This is the title of the book provider"; } }
    }
    internal class ExtendedBookProvider : InternalBookProvider
    {
        public override string Description { get { return "Extended internal provider"; } }
    }


Добавлено через 6 минут и 49 секунд
И напоследок, даже если вы не объявляете конструктор (неважно статический или нет), то он все равно имеется в любом классе (пустой или не пустой). Любая инициализация статического поля класса, компилятором неявно помещается в статический конструктор. То же самое и с инстанс полями, которые неявно помещаются в конструктор инстанса. Конструктор в классе есть всегда и его не может не быть - это системное поведение.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
alexvs11
Дата 11.3.2011, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: нет
Всего: 10



Цитата(ДобренькийПапаша @  10.3.2011,  00:39 Найти цитируемый пост)
А виртуальный конструктор вообще создать не возможно (или я что-то путаю?)

не путаете, это формальное название, которое говорит, что тип конечного объекта определяется в момент конструирования, аналогично вызываемой виртуальной функции, которая определяется также в момент выполнения

вот гляньте мое недавнее применение (c++)

Код

CParser* parser = CParser::parse( "parse.txt" );


Код

class CParser
{
public:
    static CParser* parse( const QString& path );
    virtual bool isValid() const;
...
protected:
...
};

class CParserTXT : public CParser
{
public:
    CParserTXT( const QString& path );
....
private:
....
};

class CParserXML : public CParser
{
public:
    CParserXML( const QString& path );
....
private:
....
};

CParser* CParser::parse(const QString &path)
{
    if( path.endsWith(".txt") )
    {
        return new CParserTXT( path );
    }
    else if( path.endsWith(".xml") ) 
    {
        return new CParserXML( path );
    }
    else 
    {
        return NULL;
    }
}


Добавлено через 2 минуты и 17 секунд
CParser имеет чисто виртуальные функции, абстрактный вообщем

Добавлено через 5 минут и 56 секунд
вообщем идея объединения с абстрактной фабрикой, но концептуальней
у Коплиена эта идея далеко развита в фреймах

Это сообщение отредактировал(а) alexvs11 - 11.3.2011, 00:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0891 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.