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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виртуальные конструкторы? 
V
    Опции темы
Bogdan1024
  Дата 18.9.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Код

public class A{
public A(string a);
}
public class B : A {}

Как можно промаркировать конструкторы класса A, чтобы потом можно было писать такое:
Код

B b = new b("хочу, чтобы вызвался конструктор класса а!!!");

И при этом не указывать конструктор в классе B с такой же сигнатурой. Всмысле, не писать такое:
Код

public class B : A {
public B(string a)
:base(a)
{}
}

Ибо конструкторов у класса A может быть миллион, и наследников от А может быть миллион...


--------------------
user posted image
PM MAIL   Вверх
Jlekc
Дата 18.9.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ощибка в построении архитектуры.
При нормальном построении таких вопросов не возникает


--------------------
PM MAIL ICQ   Вверх
Wanderer2019
Дата 18.9.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну.. гхм... насколько я понимаю такого сделать не получится... т.к. конструктор - это метод, описывающий элемент ДАННОГО типа. т.е. считается что для другого типа он должен быть иным, но никто тебе не мешает описать этот механизм с помощью дополнительного набора public методов родительского класса. Или же описать какую то логику в пропертях.

может я ошибаюсь и все же есть какой то свпособ???
PM ICQ MSN   Вверх
Jlekc
Дата 18.9.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кстати, как понимаю просто не хочеться при наследовании описывать конструкторы базового класа.
Попробуй поставь ReSharper. 
В нем много подсказок и автозаполнений кода, возможно и это он сделает сам.


--------------------
PM MAIL ICQ   Вверх
tol05
Дата 18.9.2007, 20:08 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 63
Всего: 170



Цитата

Как можно промаркировать конструкторы класса A, чтобы потом можно было писать такое:
Код

B b = new b("хочу, чтобы вызвался конструктор класса а!!!");


Bogdan1024, возникает вопрос: знаешь ли ты зачем вообще конструкторы нужны и как они работают?
Как конструктор класса А может гарантировано инициализировать объекты всех своих классов-потомков, которые, может быть, будут созданы через сотни лет? Потомки напишут класс и крикнут: "ты гляди, еще на .Net 2.0 написали класс, а он до сих пор наши инстансы создает!!!" Вах!!!

Цитата(Jlekc @  18.9.2007,  17:24 Найти цитируемый пост)
Попробуй поставь ReSharper. В нем много подсказок и автозаполнений кода, возможно и это он сделает сам.

вряд ли...

Это сообщение отредактировал(а) tol05 - 18.9.2007, 20:09


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
mihryak
Дата 18.9.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 19
Всего: 36



Цитата(tol05 @  18.9.2007,  21:08 Найти цитируемый пост)
Bogdan1024, возникает вопрос: знаешь ли ты зачем вообще конструкторы нужны и как они работают?

вопрос тут всё же о другом
автору просто хочет найти возможность избежать написания параметризированных конструкторов унаследованных классов, дублирующих по сигнатуре один из базовых конструкторов и ничего, кроме "вызова" base(parameter), не делающих...
PM MAIL ICQ   Вверх
tol05
Дата 18.9.2007, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 63
Всего: 170



не я C# придумал, но понять разработчиков могу... Я вот, например, так "хочу"
Код

    public class B : A
    {
        public B() : base("Hi!")
        {
            
        }

        public B(string a) : base()
        {
            
        }
    }

    public class A
    {
        public A(string a)
        {
            
        }

        public A() {}
    }

Как компилятор без явных вызовов базовых конструкторов отличит мой вариант от варианта Bogdan1024?

Это сообщение отредактировал(а) tol05 - 18.9.2007, 21:25


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
altarvic
Дата 19.9.2007, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так не подойдет?

Код


public class A{

  public static A Create(string a)
  {
     return new A(a);
   }

   public A(string a) {}
}

public class B : A {}

...

B = A.Create("")





Да, написал не подумавши. Такое не прокатит


Это сообщение отредактировал(а) altarvic - 19.9.2007, 07:02
PM MAIL   Вверх
Alek86
Дата 19.9.2007, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 2
Всего: 25



не уверен, что понял до конца идею, но вопрос вдогонку:

а что, если 10000 из того миллиона наследников не должны будут вызывать конструктор A?


--------------------
user posted image    user posted image
PM MAIL   Вверх
mihryak
Дата 19.9.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 19
Всего: 36



проблемы будут и с закрытием для пользователя наследников расширенных конструкторов базового класса (часто, например, базовый абстрактный класс имеет конструкторы, которые в наследниках вызывать, так скажем, не стоит)
PM MAIL ICQ   Вверх
Bogdan1024
Дата 19.9.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Значит, не получится так. Жаль.


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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