Czy da się referencję zmusić do działania tak jak wskaźnik z C++?

0

Czołem Bracia

Znalazłem taki artykuł:
http://anarchokomunista.wordp[...]om/2010/04/29/referencje-w-c/
wychodzi z niego na to,że jeśli mam gdzieś klasę

public class Klasa
{
   public Rect rect;//dokładniej rzecz ujmując jest to Rect z Unity 3D

   public Klasa()
   {}
   public Klasa(Rect r)
   {
       rect=r;
   }
}

I teraz w kodzie używam sobie tego w taki sposób:

Klasa k1=new Klasa(new Rect(0,0,100,50));
Klasa k2=new Klasa();
k2.rect=k1.rect;

to w k2 będę mieć referencję do tego samego co siedzi w k1,zatem zmiana recta w k1 winna odbić się na rectcie z k2.

Tymczasem tak się nie dzieje :/

Jak zatem uzyskać dokładnie taki efekt,jakbym to pole rect zdefiniował na modłę C++ Rect *rect ?

1

Zdaje się, że ten Rect to struktura. Te w C# są value-type i w takim wypadku zostaje ona skopiowana.

0

Hmm,istotnie Unity.Rect jest strukturą.Czyli co,nie da się załatwić tego wskaźnikiem?

1

Możesz stworzyć wrapper-klasę.

0

Sam znalazłem coś interesującego:
http://www.c-sharpcorner.com/[...]51624AM/PointersInCSharp.aspx
http://msdn.microsoft.com/en-us/library/y31yhkeb(v=VS.80).aspx

Czyli jednak da się zrobić po bożemu...nice

0

Używanie wskaźników w C# to bardzo daleko od 'po Bożemu'.

0

Niestety,w Unity nie mogę nastawić parametru kompilacji unsafe :/
Ehh,musi zatem być zrobione na wrapperze.

1

możesz spróbować trzymać tego Recta jako object, i rzutować typ na (Rect) kiedy potrzeba.
brzydkie rozwiązanie, ale powinno działać tak jak chcesz.

Ehh,musi zatem być zrobione na wrapperze.

uniwersalny wrapper wyglądałby jakoś tak:

class Boxed<T> where T:struct
{
    public T Value;
    public Boxed(T avalue)
    {
        Value = avalue;
    }
    public static implicit operator T(Boxed<T> box)
    {
        return box.Value;
    }
    public static implicit operator Boxed<T>(T v)
    {
        return new Boxed<T>(v);
    }
}
 Boxed<Rect> rect = new Rect(1,2,3,4);
// teraz odwołujemy się przez rect.Value
0
MasterBLB napisał(a)

Niestety,w Unity nie mogę nastawić parametru kompilacji unsafe :/
Ehh,musi zatem być zrobione na wrapperze.

Czemu nie możesz?

To w takim razie sprawdź czy możesz stworzyć osobny unsafe projekt ze wskaźnikiem i dołącz go do głównego projektu.

0

Właśnie nie ma takiej opcji żeby importować projekt-Unity tworzy własne pliki projektu Mono na podstawie assetów które posiada,nadpisując przy okazji unsafe'a którego nastawiam poza silnikiem.
A silnik odpowiedniej opcji włączającej unsafe nie posiada,to i lipa...musi być referencją i kuniec.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0