Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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 ;).

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.

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?

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...

}

}

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.