Någon som vet? Hej Johan, Tack så mycket för ditt svar!! I princip så fixar den det för det mesta...men:Manipulera data från annan klass/fönster C#?
Jag har placerat objekt i en separat klass pubObj.cs
I mitt huvudfönster gör jag:
PubObj my_pubObj = new PubObj();
Om jag från mitt "huvudfönster" öppnar ett "SettingsWin" fönster med koden:
SettingsWin settWin = new SettingsWin();
settWin.ShowDialog();
Hur gör jag för att kunna manipulera mitt objekt my_pubObj från SettingsWin.
Jag vill att ändringarna skall vara kvar i huvudfönstret när SettingsWin stängs ned.
Svara gärna med lite kod....:) //JohanSv: Manipulera data från annan klass/fönster C#?
Det finns några olika sätt, men ett enkelt sätt är att skicka med en referens till my_pubobj till kontruktorn i SettingsWin :
<code>
// Privat variabel för att hålla den lokala referensen till PubObj
private PubObj my_pubobj;
// Konstruktorn i SettingsWin
public SettingsWin(PubObj pubObj)
{
my_pubobj=pubObj;
}
public void DoStuff()
{
// Här kan du jobba med den lokala referensen
my_pubobj.MyProperty=10;
}
</code>
För att öppna SettingsWin från huvudfönstret gör du så här :
<code>
using (SettingsWin form=new SettingsWin(my_pubobj))
form.ShowDialog();
</code>
Du måste inte använda Using när du öppnar formulär, men jag gillar att göra så eftersom man då slipper anropa Dispose-metoden (fungerar alltså bara på klasser som implementera IDisposable).Sv:Manipulera data från annan klass/fönster C#?
Ett fel av mig var att glömma att deklarera pubObj "public".
Sen den här "usingmetoden" hade jag inte använt utan:
SettingsWin settWin = new SettingsWin(my_pubObj);
settWin.ShowDialog();
settWin.Dispose();
Fråga till dig eller någon annan expert där ute:
Har jag använt Dispose på rätt sätt, och om jag skulle missa att köra Dispose vad händer då?
Kommer programmet storkna pga RAM-minnesbrist?
Jag trodde att C#:s garbage collector fixade sånt med nån smart logaritm...:)Sv: Manipulera data från annan klass/fönster C#?
1) Det tillhör god programmeringssed att anropa Dispose om klassen implementerar IDisposable. Using gör ju detta ganska enkelt.
2) Om klassen använder vissa typer av resurser (icke-managed) som kanske är begränsade till antalet, så måste man anropa Dispose så snabbt som möjligt för att inte krockar skall uppstå om någon annan process eller tråd vill använda samma resurs. Och eftersom det är svårt att veta vilka resursen en speciell klass använder om inte har källkoden till den, så gäller 1) som ett bra sätt att slippa fundera på om man "behöver" anropa Dispose omedelbart eller ej.
Ungefär så tror jag man kan sammanfatta det, utan att jag för den skull har jättebra koll på GC:n.