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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> параметризация 
V
    Опции темы
Fieral
Дата 12.4.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть вот такой вот класс на java:

Код

public class Slot<T>{
    
    private Object o;
    
    public Slot(T o){super();
    this.o=o;
    
    public T getDATA() {
        return (T)o;
    }
    
}


и абстрактный класс хранящий наборы Слотов в HashTable:

Код


Slots=new HashMap<String,Slot>();
....
public void removeSlot(String string) {  this.Slots.remove(string);                }
    
public void addSlot(Slot s) {                  this.Slots.put(s.GetName(), s);         }



и всё нормально работает: слот параметризуется у наследников этого абстрактного класса и в HashTable можно класть слоты с разными параметризациями

а вот при переписывании этого кода на C# - VS2005 ругается и требует параметризовать слоты в методе getSlot у абстарктного класса

Код

private Dictionary<String, Slot> Slots;
...
public Slot getSlot(String tring) {
        return this.Slots[tring];
    }


Error    1    Using the generic type 'Rebecca_E8.Slot<T>' requires '1' type arguments


 как с этим быть? 



Это сообщение отредактировал(а) Fieral - 13.4.2008, 02:19
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
marcusmae
Дата 13.4.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


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

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



Fieral, компилятор настаивает на необходимости уточнения типа. Несовсем понятно, какую задачу должен решать приведённый Вами фрагмент. Похоже, что есть Slot<T> c дженерик-типом и есть словарь, в который должны попадать слоты различных T-типов. Так? Чтобы было от чего оттолкнуться, вот небольшая программка по мотивам Ваших фрагментов :

Код

        public class Slot<T>
        {
            private Object o;

            public Slot(T o)
                : base()
            { this.o = o; }

            public T Data { get { return (T)this.o; } }
            public String Name { get { return typeof(T).ToString(); } }
        }

        public class Slots : Dictionary<string, Object>
        {
            public void RemoveSlot(String key) { this.Remove(key); }
            public void AddSlot<T>(Slot<T> slot) { this.Add(slot.Name, slot); }
            public Slot<T> getSlot<T>(String key) { return (Slot<T>)this[key]; }
        }


Тест :

Код

        static void Main(string[] args)
        {
            Slot<int> integerSlot = new Slot<int>(3);
            Slot<double> doubleSlot = new Slot<double>(3.1415);

            Slots slots = new Slots();
            slots.AddSlot<int>(integerSlot);
            slots.AddSlot<double>(doubleSlot);

            Console.WriteLine(String.Format(
                "В первом слоте находятся данные {0}.",
                slots.getSlot<int>("System.Int32").Data));
            Console.WriteLine(String.Format(
                "В первом слоте находятся данные {0}.",
                slots.getSlot<double>("System.Double").Data));
            Console.ReadKey();
        }


Результат :

Код

В первом слоте находятся данные 3.
В первом слоте находятся данные 3.1415.


Вообще, я думаю, нет ничего плохого в том, чтобы выложить работоспособный код Java. Включим NetBeans и узнаем, что же всё-таки требуется получить smile 


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Fieral
Дата 13.4.2008, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так с одной стороны запихали - с другой вылезло:

 есть у меня функция которая рпобегает по всем слотам и выясняет из "свежесть"

Код

private Dictionary<String, Slot> Slots;
...

public Slot<T> getSlot<T>(String tring) {
        return (Slot<T>)this.Slots[tring];
    }
...

public Boolean CheckAllFresh() {
        String[] T=this.getAllSlotNames();
        for(int i=0;i<T.Length;i++)
        
        {

        if(!this.getSlot(T[i]).Fresh()){return false;}

        }
        
        return true;
    }


теперь она ругается: Error    2    The type arguments for method 'Rebecca_E8.Pipe.getOutSlot<T>(string)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

А что бы определить "свежесть" мне и не нужно знать что в себе хранят Слоты. :(

--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
mr.DUDA
Дата 13.4.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Что-то не клеится, в одном случае у вас тип Slot без аргумента T а в другом -  с ним. smile 
Код
private Dictionary<String, Slot> Slots;   // <---------- Slot (без T)
...

public Slot<T> getSlot<T>(String tring) {  // <---------- Slot<T>
        return (Slot<T>)this.Slots[tring];
    }
...


Вот так будет работать:
Код
using System;
using System.Collections.Generic;

class Slot<T>
{
    public bool Fresh()
    {
        return true;
    }
}

class Test<T>
{
    Dictionary<string, Slot<T>> Slots;

    public Slot<T> getSlot(string name)
    {
        return Slots[name];
    }

    public bool CheckAllFresh()
    {
        foreach (Slot<T> slot in Slots.Values)
        {
            if (!slot.Fresh())
                return false;
        }
        return true;
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
marcusmae
Дата 13.4.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


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

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



Кажется значением в словаре нужно поставить Object, иначе толку будет от этого словаря... smile И всё-таки, Fieral, почему бы не запостить работающий код Java (с примером применения!)?

Это сообщение отредактировал(а) marcusmae - 13.4.2008, 12:52


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Fieral
Дата 13.4.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



О, спасибо за мокания лицом в код. Сделал обходной манёвр:

Завёл абстрактый класс ASlot, который умеет отвечать на вопрос "Свежий?"
Унаследовал от него параметризованный слот и сделал словарь 

private Dictionary<String, ASlot> Slots;

Теперь только не понимаю  кто прав: шарп - требующий параметризацию или ява - плюущая на неё.


marcusmae,
в ява варианте: 2 абстрактных реализатора runable запущенные в параллельных процессах хранят в словаре слоты. в процессе работы обращаются к слотам с вопросмо "все свежие?" если да - то первый процесс читает данные, если нет - второй их туда пишет

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

это правда кому-то интересно? smile
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
marcusmae
Дата 13.4.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


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

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



Цитата(Fieral @  13.4.2008,  19:05 Найти цитируемый пост)
апущенные в параллельных процессах

процессах или потоках?

Цитата(Fieral @  13.4.2008,  19:05 Найти цитируемый пост)
обращаются к слотам с вопросмо "все свежие?"

код, пожалуйста!

Цитата(Fieral @  13.4.2008,  19:05 Найти цитируемый пост)
далее наследуются от этих реализаторов классы заточенные под обработку конкретных параметризованных конфигураций слотов. 

То есть, каждый словарь должен уметь работать только с конкретным типом слотов?

Цитата(Fieral @  13.4.2008,  19:05 Найти цитируемый пост)
это правда кому-то интересно?

Чтобы стало интересно, нужно понять сначала smile 



--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Fieral
Дата 13.4.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

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


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

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


 




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


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

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