передать в качестве аргумента экземпляр List не указывая кон

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

передать в качестве аргумента экземпляр List не указывая кон

Сообщение pango 23 апр 2013, 19:26

Как передать в качестве аргумента экземпляр List не указывая конкретного типа его элементов,
а только класс предок или интерфейс. Небольшой пример чтоб было понятней что я имею ввиду.
Как сделать этот код валидным?.

Синтаксис:
Используется csharp
public class ConcreeteType : AbstractType
{
        public ConcreeteType ()
        {
                List<ConcreeteType> list = new List<ConcreeteType>();
                execute(list);
        }

        private void execute(AbstractType list)
        {
                foreach (AbstractType element in list)
                {
                         element.DoSomething();
                }
        }
}
 


Передавать надо именно этот лист, а не пересобранный с типом элементов AbstractType,
например для того чтоб удалять или добавлять к нему элементы.
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение Woolf 23 апр 2013, 19:30

Может передать IEnumerate?
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение pango 23 апр 2013, 19:39

Можно так или через ICollection,
но это не позволит использовать Add и Remove у листа,
а его элементы придётся кастить.
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение Zaicheg 23 апр 2013, 19:41

Если я правильно понял задачу:
Синтаксис:
Используется csharp
public List<Transform> myList = new List<Transform>();

void Start()
{
        MethodA(myList);
        MethodB(myList);
}

void MethodA(IList _list)
{
        _list.Add(this.transform);
}

void MethodB(IList _list)
{
        _list.RemoveAt(0);
}


UPD: Кажется, неправильно понял.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение Woolf 23 апр 2013, 19:51

Такс... а если передать List<Object> ? Или List<Monobehavior> ?
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение pango 23 апр 2013, 19:58

Пробовал, результат отрицательный.
я уже начинаю переживать, что красиво это не реализуется.
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение DbIMok 23 апр 2013, 20:18

google list c# derived
зачем так проектировать, чтобы потом героически преодолевать? возможно сама задача сформулирована неверно и нужно выбрать другой способ ее решения, а не обсуждать неправильный
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение pango 23 апр 2013, 20:33

возможно сама задача сформулирована неверно

Что значит не верно,
я желаю передать в функцию лист с экземплярами абстрактного класса.
Расскажите что неверного в этой задаче,
использование абстрактных классов или использование листа?
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение seaman 23 апр 2013, 20:35

Собственно не совсем понял задачу. Вижу синтаксическую ошибку:
private void execute(AbstractType list)
Передаем сюда список, а тип параметра - просто тип. Нужно:
private void execute(List<AbstractType> list)
Можно и так:
private void execute(List<ConcreeteType > list)
Вроде все должно работать
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение pango 23 апр 2013, 20:41

Да, одна проблема - не работает.

Если типы у листов идентичные - работает,
если у функции в качестве типа элементов указан родительский тип или интерфейс - нет.
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение seaman 23 апр 2013, 20:43

Да, одна проблема - не работает.

Что значит "не работает"? Вы скрипт то исправили?
ЗЫ почему у других работает?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение Tolking 23 апр 2013, 20:47

pango писал(а):
возможно сама задача сформулирована неверно

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


Передача списков разного типа в функцию. Что функция должна делать со списками произвольного типа?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2718
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение seaman 23 апр 2013, 20:49

Что функция должна делать со списками произвольного типа?

перебирать. Что делает Generic функция?
Передача списков разного типа в функцию.

И что в этом неверного?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение pango 23 апр 2013, 20:56

Я набросал этот код прямо в теме, и конечно же лажанулся.
Но сути это не меняет.

Синтаксис:
Используется csharp
public class ListTest : object
{
        public ListTest ()
        {
                test(new List<ListTest>());
                test(new List<object>());
        }
       
        private void test(List<object> l)
        {
               
        }
}

ListTest - является наследником объекта, можно было явно не указывать, но пусть будет для наглядности.
test(new List<object>()); - прокатывает
test(new List<ListTest>()); - не прокатывает, хотя ListTest наследник object
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: передать в качестве аргумента экземпляр List не указывая кон

Сообщение pango 23 апр 2013, 20:59

Передача списков разного типа в функцию.


они могут быть в большей степени схожие чем разные, предок то у них общий
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot], Yandex [Bot] и гости: 29