Zum Inhalt springen

Zugriff auf ein ConfigurationsObjekt von anderen Klassen aus (C#)


Rubansky

Empfohlene Beiträge

Hallo, ich verzweifle gerade ein wenig und hoffe hier ein wenig hilfe zu finden.

1. Ich hab eine Config-Klasse mit ein paar Feldern, die zunächst mit den Standartwerten initialisiert werden (z.B. min_change_time).

public class Configuration

{

public int min_change_time = 60;

public Configuration ()

{

}

}

2. Ich habe eine Dienstgenerator-Klasse, die auch Main() enthält, in welcher nun solch ein Configuration-Objekt erzeugt wird.

public class Dienstgenerator

{

[sTAThread]

public static int Main(string[] args)

{

Configuration configuration= new Configuration();

}

}

3. Es gibt weitere Klassen, z.B. Pow

Innerhalb der Dienstgenerator-Klasse bzw. Main() kann ich z.B. mittels

configuration.min_change_time = 10;

die Felder meines Objektes benutzen (lesen schreiben usw.).

Aber alle anderen Klassen verweigern sich bei configuration.min_change_time und sagen

"The type or namespace name configuration could not be found (are you missing a using directive or an assembly reference?)"

Der Plan ist halt ein Configurations-Objekt zu haben, welches zunächst mit Standartwerten initialisiert wird. Allerdings soll es möglich sein die Werte durch einlesen einer Datei zu überschreiben. Mache ich die Felder static bleibt die Fehlermeldung in den Fremden Klassen (z.B. Pow) und darüber hinaus bekomme ich jetzt auch in Dienstgenerator den Fehler

"Static member 'Dienstgenerator.Configuration.min_change_time' cannot be accessed with an instance reference; qualify it with a type name instead"

Ich bin mir ziemlich sicher, dass ich an irgend einer stelle ein gewaltiges Brett vorm Kopf hab, aber weder die Kreissäge Google noch gemeinsames ziehen meiner Java/C++ Freunde konnten es entfernen. Und ich dachte Code von C++ nach C# portieren kriege sogar ich hin *seufz*.

Schonmal vielen Dank für die Hilfe oder zumindest fürs Lesen ;).

Link zu diesem Kommentar
Auf anderen Seiten teilen

tja, hat sich an sich erledigt.

nach static hätte ich natürlich Configuration.min_ch... statt configuration.min_ch... schreiben müssen.

Würde mich dennoch interessieren, ob es eine andere möglichkeit gibt, für den Fall das ich demnächst mal 2 oder 3 Konfigurationen gleichzeitig verwenden möchte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

soviel zu dem hat sich erledigt teil:

Nun erzeuge ich in Main eine ArrayList

ArrayList dienstelemente = new ArrayList();

in der ich durch File-Einlesen einzelne Dienstelemente ablege.

Allerdings muss ich mit dieser Arraylist in nahezu jeder anderen Klasse rumspielen, z.B. die länge sowie start- und endzeit der einzelnen Dienstelemente auslesen und gucken ob sie aneinander passen.

Es muss doch einfach möglich sein Objekte zu erzeugen und auf diese dann überall zuzugreifen, ohne das ich sie der Methode immer mit an den Kopf werfe?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst den Zugriff auf die ArrayList per Singleton ermöglichen. Dadurch hast du überall im Programm Zugriff auf diese eine Instanz:

public class MyClass

{

private static ArrayList mMySingleton = new ArrayList();

public static ArrayList MySingleton

{

get { return mMySingleton; }

}

}


public class AnotherClass

{

public static void Main()

{

MyClass.MySingleton.Add("abc", 345);

// usw...

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit Private bzw Public hat das aber nichts zu tun.

Alle Member sind ja sowiso public und damit überall da wo sie sichtbar sind auch zugreifbar.

Ich glaube eher, deine Klassen sind in verschiedenen Namespaces deklariert. Wenn dem so ist, musst du entweder über using MeinNamespace den Zugriff ermöglichen oder z.B. MeinNamespace.Pow.TueDasNötige() schreiben.

Um einer Klasse Zugriff auf ein "globales Objekt" zu geben, füge der Klasse ein privates Member vom Typ des "globalen Objekts" hinzu und initialisiere den Member im Constructor mit einer Referenz auf das globale Objekt.

Ungefähr so:

class Global {
....
}

class User{

private Global global;

public User( Global g)
{
global =g;
}
}[/PHP]

und in main() irgendwo:

Global myGlobal = new Global();

User myUser = new User(myGlobal);

btw "globale Objekte " sind schlechter Stil.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...