webForumDet fria alternativet

skicka objekt till metod

.NET

2 svar · 367 visningar · startad av The_Hulk

Medlem sedan juni 20031 837 inlägg
Frågan#1

Hej!

har precis börjat med C#, när man skickar med ett objekt till en metod/funktion, kompieras då ojektet om man inte anger ref för att skicka en referens till det?

Håller C# reda på när objektet tas bort eller måste man själv hålla reda på det. Dvs. är det mer som java eller som C++?

Ni får gärna skriva mer saker man bör tänka på när det gäller C# kan tyvärr inte så mycket om det än.

Medlem sedan juni 2004533 inlägg
#2

Själva objektet kopieras inte och skickas inte någonstans, det ligger där det ligger i minnet. Det som skickas till metoden är en kopia av referensen till objektet.

Ifall du anger ref för parametern så kommer du att skicka en referens till referensen för objektet.

Exempel:

// skapa ett objekt, list är en referens till objektet:
ArrayList list = new ArrayList();

// anropa en metod och skicka med en kopia av referensen
// metoden kan ändra objektet, men inte list
mittObjekt.metoden(list);

// anropa en metod och skicka med en referens till referensen
// metoden kan ändra både objektet och list
mittObjekt.metod2(ref list);

---

C# har 'garbage collection' precis som Java. Du behöver alltså inte allokera eller frigöra minne.

Vissa objekt som använder mycket resurser, som till exempel System.Drawing.Image, har dock en Dispose-metod som du bör använda. Den frigör direkt de resurser som objektet använde.

Medlem sedan juni 20031 837 inlägg
#3

Vad är skillnaden på din två metod anrop?
vad menar du med att man kan ändra på både objektet och list? Menar du då att man kan skapa ett nytt objekt för i metoden och peka list til det nya objektet?

public void metod1(ArrayList list)
{
    list = new ArrayList();
}

public void metod2(ref ArrayList list)
{
    ArrayList ar = new ArrayList();
    list = ref ar;
}

ArrayList minLista = new ArrayList()
metod1(minLista);
metod2(ref minLista);

Kan man skriva så här?
Får man en ny lista från båda metoder eller bara från den andra?

134 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)