Autor Wątek: Jedna klasa, różne typy danych  (Przeczytany 2167 razy)

Offline ASTROMAG

  • Użytkownik

# Wrzesień 24, 2008, 21:34:27
Witam,
Mam specyficzny problem, mianowicie chciałbym stworzyć klasę (pewnego rodzaju kontener) przechowujący jednocześnie dane różnego typu (wyższa warstwa mówiłaby użytkownikowi jakiego typu jest dana zmienna). Oczywiście mógłbym wszystko rzutować na „object”, ale mi bardzo zależy na szybkości (zarówno zapisu jak i odczytu), do projektowanej klasy dodawane byłyby  typy proste jak i referencyjne. Generyczność raczej odpada.
« Ostatnia zmiana: Wrzesień 25, 2008, 10:29:37 wysłana przez Złośliwiec »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline mykhaylo

  • Użytkownik
    • Wings of Fury 2

# Listopad 28, 2008, 20:46:32
Dlaczego generyczność odpada?

Offline Esidar

  • Użytkownik

# Listopad 28, 2008, 21:22:13
Oczywiście mógłbym wszystko rzutować na „object”, ale mi bardzo zależy na szybkości (zarówno zapisu jak i odczytu), do projektowanej klasy dodawane byłyby  typy proste jak i referencyjne. Generyczność raczej odpada.

Zależy ci na szybkości w czym ? Rzutowaniu między typami ? Pobieraniu elementu o indexie.. ? W C# tak jak w innych językach strongtyped, mozesz tworzyć kontenery tylko jednego typu.
« Ostatnia zmiana: Listopad 28, 2008, 21:24:39 wysłana przez Esidar »

Offline Asmodeusz

  • Użytkownik
    • Bogumił Wiatrowski: Blog

# Grudzień 06, 2008, 03:32:20
Oczywiście mógłbym wszystko rzutować na „object”, ale mi bardzo zależy na szybkości (zarówno zapisu jak i odczytu), do projektowanej klasy dodawane byłyby  typy proste jak i referencyjne. Generyczność raczej odpada.

Zależy ci na szybkości w czym ? Rzutowaniu między typami ? Pobieraniu elementu o indexie.. ? W C# tak jak w innych językach strongtyped, mozesz tworzyć kontenery tylko jednego typu.
Sprawę rozwiązuje dowolny kontener typu object. Dodając do tego takie konstrukcje jak typeof(), object is type i ewentualne filtrowanie elementów po typie (np. korzystając z LINQ: (from item in container where item is string select item).ToArray()) chyba dostajemy to, co chciałeś. .NET optymalizuje zapytania LINQ pod runtime i wieloprocesorowość, nie wiem jak z optymalizacją reszty. Sam z tego korzystam czasem przy różnych kontenerach ;)

poopa

  • Gość
# Grudzień 06, 2008, 06:37:22
Jak ci zaleźy na szybkości to zacznij od stworzenia dwóch kontenerów: dla typów prostych(value?) i referencyjnych.

Rzutowanie na object i z powrotem jest drogie, siur... od tego masz generyki...

Podaj jeden powód... dlaczego to miałoby nie działać z generykami?
Podaj jakis przykład zastosowania gdzie nie wiesz jak zastosować generyki, a my może coś wymyślimy. ;)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Grudzień 06, 2008, 16:59:20
Myślę, że przez 2.5 miesiąca autor już problem rozwiązał. ;)