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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов перегрузки инициализации из инициализации, Как вызвать Class(p1, p2) из Class(p1) 
:(
    Опции темы
Resha
Дата 14.3.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ситуация:

Есть класс:

Код

public class Privet
{

// Перегрузка инициализации 1
public Privet(string Message, string Name)
{
Console.Write(Message + ", " + Name);
}

// Перегрузка инициализации 2
public Privet(string Message)
{
// Вызов перегрузки 1
Privet(Message, "Anonimous");
}

// Перегрузка инициализации 3
public Privet()
{
// Вызов перегрузки 1
Privet("Hi", "Anonimous");
}

}



Т.е. необходимо вызывать функцию инициализации, как обычную функцию. Какие есть наиболее эффективные в плане уменьшения количество копипастов (вариант с созданием дублирующей функции fn_Privet(string Message, string Name) и вызова её, вместо Privet(string Message, string Name) мне не подходит - слишком большое количество перегрузок и взаимосвязь м/д ними, в итоге получится около 10 лишних функций)?

Заранее спасибо smile
PM MAIL   Вверх
PashaPash
Дата 14.3.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Resha, 
Код

...
// Перегрузка инициализации 2
public Privet(string Message) : this(Message, "Anonimous")
{

}
...



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


Intellectual feast
**


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

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



Код

    public class Privet
    {
        public Privet(string Message, string Name)
        {
            Console.Write(Message + ", " + Name);
        }
        public Privet(string Message) : this (Message, "Anonimous")
        {
        }
        public Privet() : this("Hi")
        {
        }
    }



--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Resha
Дата 14.3.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вижу, что упрощение кода упростило и ответы.

Предположим, что в случае

        public Privet(string Message)
        {
        }

Мне Name надо получить из файла дефолтовых настроек. Таким образом, ситуация расширяется до

Код

public class Privet
{
// Перегрузка инициализации 1
public Privet(string Message, string Name)
{
Console.Write(Message + ", " + Name);
}
// Перегрузка инициализации 2
public Privet(string Message)
{

(получение настроек из xml)

string Name = [имя из настроек]
// Вызов перегрузки 1
Privet(Message, Name);
}
// Перегрузка инициализации 3
public Privet()
{

(получение настроек из xml)

string Name = [имя из настроек]
string Message = [имя из настроек]
// Вызов перегрузки 1
Privet(Message, Name);
}
}


Как вызвать перегрузку инициализации с параметрами, получаемыми в другой перегрузке инициализации?
PM MAIL   Вверх
Dblma
Дата 14.3.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вместо вызова Privet(Message, Name); использовать this(Message, Name); 
PM MAIL ICQ   Вверх
Resha
Дата 14.3.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

Class Privet
{

Privet(string Message, string Name)
{
}

Privet()
{
this("Hi", "Petya");
}

}


this - Ошибка - "Ожидается имя метода"

Это сообщение отредактировал(а) Resha - 14.3.2008, 13:55
PM MAIL   Вверх
vponomarov
Дата 14.3.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как вариант, можно сделать один (наиболее конкретный Privet(string Message, string Name)) конструктор в виде функции
тогда проблем с ее вызовом не будет



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


Новичок



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

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



vponomarov, ну так в итоге и пришлось сделать smile Просто более красиво было бы, если бы избавление от абстракции шло постепенно. Это избавляет от необходимости множественного редактирования кода в случае внесения изменений в самую "неабстрактную" функцию (ту, в которой наибольшее количество параметров).

Да и еще хотелось бы предоставить возможность при инициализации класса, например, новостей (News) давать возможность как вывода одной новости (за которой по сути должен идти список других новостей), так и просто списка новостей, т.е.

Код

...

Public News()
{
(вывод списка новостей)
}

Public News(int Id)
{

(вывод новости Id)

News();

}

...

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

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


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

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


 




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


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

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