Halten meine Liste/dictionary als Global zugänglich
Ok... ich versuche zu verstehen, dieses ganze Objekt orientierte Programmierung, aber ich halte Sie landen in einer Sackgasse. 😉
Ich versuche zu speichern oder vielmehr speichert eine große Menge Daten mit Verwendung von Klassen, als ich sollte. Ich möchte zum speichern von planetaren Daten durch die Verwendung einer Klasse mit mehreren Eigenschaften, werde ich dann speichern Sie diese in einer Liste an.
Mein problem ist, dass ich nicht weiß, wie man diese Liste weltweit zugänglich, es ist nur zugänglich in dem Fall, wo es erstellt wird.
Einige Beispiel-code von meinem test-Umgebung unter.
OrbitalBodies.cs
class OrbitalBodies
{
public int BodyID { get; set; }
public string BodyName { get; set; }
public int BodySize { get; set; }
public int BodyX { get; set; }
public int BodyY { get; set; }
}
From1.cs
public void button1_Click(object sender, EventArgs e)
{
var bodies0 = new OrbitalBodies();
var orbitalList = new List<OrbitalBodies>();
bodies0.BodyID = 4;
bodies0.BodyName = "Earth";
bodies0.BodySize = 125;
bodies0.BodyX = -450;
bodies0.BodyY = 75;
orbitalList.Add(bodies0);
bodies0.BodyID = 0;
bodies0.BodyName = "Sol";
bodies0.BodySize = 500;
bodies0.BodyX = 0;
bodies0.BodyY = 0;
orbitalList.Add(bodies0);
//var orbitalDic = new Dictionary<int, OrbitalBodies>();
MessageBox.Show("Planetary body name: " + Convert.ToString(orbitalList.Count()));
}
Habe ich verbrachte ein paar Stunden auf der Suche, mein problem hier und an anderen Orten, aber ich weiß nicht, wie ich auf die Informationen zugreifen können, den ich in der Liste andere als in diesem einzelnen Fall. Meine Reale Anwendung haben Zehntausende von orbitalen Einrichtungen und viele andere Daten, die zugänglich sein müssen in vielen Formen und vielleicht sogar weitere Klassen.
Etwas Hilfe würde geschätzt werden, was ist die beste Lösung? Tun Sie es ganz anders?!?
seine nicht ganz richtig. Viele Dinge, meistens in der Spiele-Entwicklung, verwendet, um statische Daten zu speichern-Spiel (Welt) oder andere Dinge, die ändern sich nicht während laufen, oder benötigt werden, zugänglich von überall und jederzeit.
Ich war nicht sagen, Sie sollten nicht immer alles Global zugänglich, war ich einfach sagen, dass in diesem Zusammenhang, es scheint nicht zweckmäßig, da das, was er tut, und dass es selten ist, dass man in einer situation, wo es angemessen ist. Wenn das nicht klar ist, entschuldige ich mich.
Perry: Keine Entschuldigung dafür, dass es eine Globale variable. Dependency injection ist die Zukunft dude.
Nun, dies ist der Beginn einer Art von Spiel. Ein Spiel, das behandeln ganz Zut Daten. Nicht das übliche mainstream-shooter-Art...;) ich muss ziemlich viel Daten zugänglich sein, die ganze Zeit, das Lesen aus einer Datenbank wird nur dann zukunftsfähig sein, beim speichern und laden. Mehr oder weniger...
InformationsquelleAutor user2411504 | 2013-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollen Sie nicht statische member oder singletons (beide verursachen mehr Probleme als Sie lösen), müssen Sie Dependency Injection.
Außerhalb des Formulars erstellen Sie die Liste, übergeben Sie es in die Formen, die Konstruktor. Überall müssen Sie verwenden Sie die Liste, übergeben Sie die Instanz aus, die Sie aus der form.
Diese Weise gibt es nur eine Liste, überall muss die Liste übergeben wird eine Liste (nur zufällig die gleiche Liste).
Wenn man in der Zeit erkennen, die Sie wirklich brauchen, um das Modell in zwei unterschiedlichen Systemen, erstellen Sie einfach zwei verschiedene Listen und übergeben Sie an zwei unterschiedliche Formen, alles funktioniert und Sie brauchen nicht zu gehen zurück durch den code entfernen der Verweise auf die statischen Mitglieder.
Ehrlich, das ist völlig machbar, ohne auf die dunkle Seite und die Verewigung des bösen, das statische/Globale Variablen.
NB Warum statische Variablen werden als böse
Wir können die Stimmen unterscheiden, mate, ich sehe keine globalen/statischen Variablen als eine Art hammer.
Goto ist vorhanden, und es ist gut etabliert, dass Sie sollten nie (wo nie -> 0) verwendet werden, z.B. GOTO noch schädlich? und Schraube guter Praxis, wie schlimm könnte es sein. Ich bin an dem Punkt, wo ich gerne Globale Variablen in die gleiche Rakete mit goto und Schießen Sie sowohl in der Sonne.
Sie verurteilen das tool eher als die Arbeiter hier, aber, es ist nicht so, dass GOTOs/Globale Variablen sind schlecht, es ist die Tatsache, dass (mehr als oft nicht) Sie missbraucht werden. Nicht, dass ich sage, dass das Zeug in der alltäglichen Programmierung - einfach nur das wiederholen Sie einen Zweck haben, den job können wenn Sie richtig verwendet.
Ich werde gerne verurteilen, sowohl das Werkzeug und die Arbeit Mann 🙂 können vereinbaren, nicht einverstanden mate.
InformationsquelleAutor Binary Worrier
Design-Muster Singleton.
Dann überall in Ihrem code, wenn Sie benötigen
orbitalList
nennenVersuchen Sie nicht, die Verwendung von statischen Klassen, weil Sie Durcheinander in der Bezeichnung der OO-design.
Besser als statische Klassen. Und für viele Dinge, Sie sind eine gute Lösung. Nicht in diesem Fall, obwohl, aber für den Anfänger, wenn er will "schnell" zu sehen, ein Ergebnis, Sie sind genug.
Es ist nicht wirklich anders als eine statische Klasse, wenigstens, wie es ist. Der einzige wirkliche Unterschied ist, dass ein singleton kann eine Schnittstelle implementieren und nutzen Polymorphismus, aber Sie nicht tun,, so ist es nicht wirklich besser aus.
Und warum spielt es eine Rolle, dass es eine statische Referenz auf ein Objekt mit einem Verweis auf eine Liste, anstatt nur eine statische Referenz auf eine Liste? Was ist der Unterschied (in diesem Kontext) macht es?
Ich bin sicher, Sie haben. Möglicherweise haben Sie nicht genannt, aber Sie haben.
InformationsquelleAutor Martin Perry
Machen
OrbitalList
eine Eigenschaft:Es sagt mir nur, dass "public static List<OrbitalBodies> OrbitalBodyList { get; set; }" inkonsistent Barrierefreiheit... ist weniger leicht zugänglich als property.
Ihre
Form
musspublic
(oderOrbitalList
internal
)Soweit ich sagen kann, die form ist ein 'public partial class'
Warum ist OrbitalBodyList statische?!
InformationsquelleAutor Ahmed KRAIEM
Wenn Sie nur wollen, um den Zugriff auf Ihre Liste innerhalb der "Form1" - Klasse, nur deklarieren Sie es wie ein eigenes Mitglied aus einer Funktion:
dann instantiieren Sie es in Ihrem "button1_Click" - Methode.
Wenn Sie möchten, Zugriff auf Ihre Liste in allen Ihren Klassen, ich schlage vor, Sie machen es statisch :
ist und Sie es so nennen
Hoffe, das hilft.
Ok, ich habe heute etwas gelernt. Aber Sie müssen nicht downvote meine Antwort, als ich versuchte, zu helfen.
Sorry bud, aber ich habe nicht downvote Sie Ihre Antwort. Ich würde nicht downvote Antworten auf eine Frage, wo habe ich auch eine Antwort.
Leider sind die Informationen, die zugänglich sein müssen durch viele Formen. 🙁
Ich finde binäre Kreuzzug gegen statische Variablen ist seltsam. Dank orel, das hilft. Da, wie statische Variablen arbeiten, um ein Ziel zu erreichen, sehe ich nichts falsch mit Ihnen. Wenn es kein problem ist, etwas zu tun, dann tut es, ist nicht falsch. Dumme Programmierer. Ich werde nie verstehen, Ihre syntax Argumente.
InformationsquelleAutor orel