Autor Wątek: Czym zastapic C++'owy wskaznik?  (Przeczytany 6778 razy)

st3tc

  • Gość
# Sierpień 06, 2008, 17:15:18
Zalozmy, ze mam sobie klase CTexture, ktore przechowuje dane o teksturze. Teraz chce sobie zrobic klase, ktora moze "pobawic sie" instancja CTexture. W C++ zrobilbym to tak:
class CTexture
...

class CZabawka
{
private:
CTexture *texture;

public:
void assignTexture(CTexture *texture)
{
this->texture = texture;
}
Od tego momentu instancja klasy CZabawka moze sobie przypisac jakas teksturke i wywolywac jej metody i bawic sie danymi. I teraz jak cos takiego zrobic w C#? Kiedy szukam czegos o referencji to oczywiscie dostaje tony przykladow o przekazywaniu parametrow funkcji przez referencje. No czyli cos, co robi assignTexture. Ale jak zrobic taki "wskaznik" jakim jest wlasnie texture w klasie CZabawka? Czy musze w takiej sytuacji uzywac "niebezpiecznych" wskaznikow i referencji jak w zwyklym C++, czy sa moze do tego typu operacji jakies bardziej "bezpieczne" metody?

Offline Mr. Spam

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

st3tc

  • Gość
# Sierpień 06, 2008, 17:29:27
eee.....

    class CTexture
    {
        public int     val;
    }

    class CZabawka
    {
        private CTexture texture;

        public void assignTexture(CTexture texture)
        {
            this.texture = texture;
            this.texture.val = 200;
        }
    }

Offline Dab

  • Redaktor
    • blog

# Sierpień 06, 2008, 17:33:45
Wszystkie obiekty w C# poza strukturami są przekazywane przez referencję. Podstawy języka się kłaniają. ;)

Offline Siódmy

  • Użytkownik
    • SourceSDK.pl

# Sierpień 06, 2008, 18:04:15
a uchwyty?

Offline Esidar

  • Użytkownik

# Sierpień 06, 2008, 18:13:03
a uchwyty?
Systemowe ? Można zapamiętywać w System.IntPtr.

st3tc

  • Gość
# Sierpień 06, 2008, 18:19:52
Wstyyyyyd. ciuś ciuś.   ;)

A ostatnio było mielone.  A dokładniej... poprzedni temat w kategorii. ;D

Offline Anton Chigurh

  • Użytkownik

# Sierpień 06, 2008, 18:21:41
Pamiętam, jak próbowałem użyć TAO w C# i tam funkcje typu glGenTextures itp. wymagały wskaźników. Za nic nie chciało mi to działać - kompilowało się, ale wskazana wartość nie była ustawiana na odpowiedni ID. Pomogło tworzenie tablic (np. jednoelementowych) i przekazania w miejscu pointera. Jest wysoce prawdopodobne że robiłem coś nie tak, ale jakbyktoś miał podobny problem, to polecam takie rozwiązania bez dodykania się do unsafe-o podobnych rozwiązań.

st3tc

  • Gość
# Sierpień 06, 2008, 18:22:58
Aaa... ciekawe :)
Czyli ponizszy kod:
CTexture t1, t2;

// tutaj robimy cos z t1

t2 = t1;
Spowoduje, ze t2 stanie sie jedynie prostym odwolaniem do t1? (oczywiscie zakladajac, ze nie przeciazylismy operatora = )
Jesli tak to w takim razie ile pamieci zajmie t2? No bo w przypadku wskaznikow to mamy oczywiscie 4 (albo 8 - zalezy od procka), a w powyzszej sytuacji?

Offline SirMike

  • Użytkownik
    • SirMike's Techblog

# Sierpień 06, 2008, 18:46:39
Spowoduje, ze t2 stanie sie jedynie prostym odwolaniem do t1? (oczywiscie zakladajac, ze nie przeciazylismy operatora = )
Jesli tak to w takim razie ile pamieci zajmie t2? No bo w przypadku wskaznikow to mamy oczywiscie 4 (albo 8 - zalezy od procka), a w powyzszej sytuacji?

AFAIR nie jestes w stanie tego sprawdzic w zaden sposob.

Offline revo

  • Użytkownik

# Sierpień 06, 2008, 19:28:32
Aaa... ciekawe :)
Czyli ponizszy kod:
CTexture t1, t2;

// tutaj robimy cos z t1

t2 = t1;
Spowoduje, ze t2 stanie sie jedynie prostym odwolaniem do t1? (oczywiscie zakladajac, ze nie przeciazylismy operatora = )
Jesli tak to w takim razie ile pamieci zajmie t2? No bo w przypadku wskaznikow to mamy oczywiscie 4 (albo 8 - zalezy od procka), a w powyzszej sytuacji?

maxest, weź sobie jakąś książkę kup i poczytaj (tak, książki nie tylko się pisze, ale też czyta ;>) - takie wątki i posty to już dowód Twojego wielkiego lenistwa.

operator= nie da się w C# przeciążyć.

st3tc

  • Gość
# Sierpień 06, 2008, 19:41:36
Cytuj
maxest, weź sobie jakąś książkę kup i poczytaj (tak, książki nie tylko się pisze, ale też czyta ;>)
No wyobraz sobie, ze duzo ksiazek przyszlo mi juz czytac, w tym dwie o C# :P. Niedlugie co prawda, ale tego tematu niestety tam nie bylo poruszonego. A naprawde chcialbym wiedziec jak wyglada tego typu mechanizm w C# i jednoczesnie nie przekopywac sie przez jakas 1000-stronicowa ksiege :P. Stad to proste pytanie w tym temacie

Offline SirMike

  • Użytkownik
    • SirMike's Techblog

# Sierpień 06, 2008, 19:42:53
No wyobraz sobie, ze duzo ksiazek przyszlo mi juz czytac, w tym dwie o C# :P. Niedlugie co prawda, ale tego tematu niestety tam nie bylo poruszonego.

Wyrzuc te ksiazki :P

st3tc

  • Gość
# Sierpień 06, 2008, 19:53:33
:)
« Ostatnia zmiana: Sierpień 06, 2008, 21:22:06 wysłana przez st3tc »

Offline Anton Chigurh

  • Użytkownik

# Sierpień 06, 2008, 20:35:26
Spowoduje, ze t2 stanie sie jedynie prostym odwolaniem do t1? (oczywiscie zakladajac, ze nie przeciazylismy operatora = )
Jesli tak to w takim razie ile pamieci zajmie t2? No bo w przypadku wskaznikow to mamy oczywiscie 4 (albo 8 - zalezy od procka), a w powyzszej sytuacji?

AFAIR nie jestes w stanie tego sprawdzic w zaden sposob.
Być może można sprawdzić ile zajmie w MONO, zaglądając do kodu ;-)

st3tc

  • Gość
# Sierpień 06, 2008, 21:10:23
Być może można sprawdzić ile zajmie w MONO, zaglądając do kodu ;-)
Do kodu .NET też można - ma go każdy kto ma .NET zainstalowany ;) (to tak przy okazji ;) )