Witam forumowiczów. Z racji że jestem początkującym programista i mam mały problem z obietkami. Mianowicie jak zrobić tablice obiektów która nie zaniknie poza zakresem?
Zadeklaruj ją jako pole klasy?
Użyj operatora new
?
... ?
Nie wiem za bardzo w czym problem, tworzysz normalną tablicę (listę) i wypełniasz ją obiektami. To nie C++ gdzie trzeba było robić wskaźniki do obiektów żeby te nie były usuwane po wyjściu z funkcji. O ile będzie do tej tablicy jakakolwiek referencja, to będzie ona istniała razem z obiektami w niej zawartymi - Garbage Collector się jej nie tknie.
RudyPingwin napisał(a):
Witam forumowiczów. Z racji że jestem początkującym programista i mam mały problem z obietkami. Mianowicie jak zrobić tablice obiektów która nie zaniknie poza zakresem?
Poza jakim zakresem?
Na 90% chcesz utworzyć pole w klasie, no ale zawsze zostaje te 10%.
Jeszcze nie za bardzo kumam co próbujecie mi wytłumaczyć. Wytłumaczę to na przykładzie:
Mam form1 który clickbutton wywołuje metode obiektu x. Ta metoda w zależności od tego czy znajdzie w tekście dane tworzy tablice obiektów i wpisuje dane konstruktorem. Niestety po wywołaniu metody x i odwołania się z Form1 do tych stworzonych obiektów mam err 'Przykład' does not exist in the current context '
Pokaż kod. Ale na 99% dostałeś już dwukrotnie odpowiedź: pole klasy.
Problem jest w ostatniej linijce buttonclick. Tylko nie bić jak coś dopiero ogarniam:D
private void bWczytaj_Click(object sender, EventArgs e)
{
OpenFileDialog oknWczytaj = new OpenFileDialog();
oknWczytaj.Filter = "Pliki textowe (txt)|*.txt";
String filepath = oknWczytaj.FileName;
if (oknWczytaj.ShowDialog() == DialogResult.OK)
{
this.bWczytaj.BackgroundImage = global::MuOSystem.Properties.Resources.openok;
}
ExtractionHandler ParserSB = new ExtractionHandler(oknWczytaj.FileName);
ParserSB.ExtractData();
this.ListTextBox.Text = Npc[0].OldLine; <--Tutaj
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.IO;
namespace MuOSystem
{
public class ExtractionHandler
{
#region Properties
public string FIleToExtract { get; set; }
#endregion
#region Constructor
public ExtractionHandler() { }
public ExtractionHandler(string filename) { this.FIleToExtract = filename; }
#endregion
#region Extraction
public void ExtractData()
{
try
{
string line;
System.IO.StreamReader file = new System.IO.StreamReader(this.FIleToExtract);
int i = 0;
while ((line = file.ReadLine()) != null)
{
char[] delimiterChars = { ' ', '\t' };
if (!string.IsNullOrEmpty(line.Trim()))
{
if(!line.StartsWith("//") && (!line.StartsWith("1") && line.Length <=2))
{
line.Trim();
string[] values = line.Split(delimiterChars);
cNpc[] Npc = new cNpc[99];
Npc[i] = new cNpc(0, line, Int32.Parse(values[0]), Int32.Parse(values[1]), Int32.Parse(values[2]), Int32.Parse(values[3]), Int32.Parse(values[4]), Int32.Parse(values[5]));
i++;
}
// }
}
}
file.Close();
}
catch (Exception ex) { }
return;
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MuOSystem
{
public class cNpc
{
public cNpc(int a, string b, int c, int d, int e, int f, int g, int h)
{
IdLine = a; OldLine = b; MonsterID = c; MapID = d; Distance = e; XPosition = f; YPosition = g; Dir = h;
}
public int IdLine;
public string OldLine;
public int MonsterID;
public int MapID;
public int Distance;
public int XPosition;
public int YPosition;
public int Dir;
}
}
POLE KLASY
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.