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

0

Czołem Bracia

Znalazłem taki artykuł:
http://anarchokomunista.wordpress.com/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

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
1
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