Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public interface IInstance { // Eigenschaften string InstanceID { get; } } public abstract class InstanceLister<T> : ObservableObject, IInstance where T : IInstance { // Eigenschaften public static ObservableHashSet<T> Instances { get; private set; } public abstract string InstanceID { get; } // Konstruktor static InstanceLister() { Instances = new ObservableHashSet<T>(); } public InstanceLister() { Instances.Add(this); } ~InstanceLister() { Instances.Remove(this); } // Methoden public static bool ExistsID(string InstanceID) { return Instances.FirstOrDefault(i => i.InstanceID == InstanceID) != null; } } |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CeDoMain« (13.05.2016, 22:57)
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public interface IInstance { // Eigenschaften string InstanceID { get; } } public abstract class InstanceLister<T> : ObservableObject, IInstance where T : InstanceLister<T> { // Eigenschaften public static ObservableHashSet<T> Instances { get; private set; } public abstract string InstanceID { get; } // Konstruktor static InstanceLister() { Instances = new ObservableHashSet<T>(); } public InstanceLister() { Instances.Add((T)this); } ~InstanceLister() { Instances.Remove((T)this); } // [...] } |
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
public class ObservableHashSet<T> : HashSet<T>, INotifyCollectionChanged { // [...] public new bool Add(T Item) { var r = base.Add(Item); CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, Item)); return r; } // [...] } |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CeDoMain« (14.05.2016, 01:01)
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Hi Leute,
ich habe mehrere Klassen (auch Generics), die alle während der Laufzeit erzeugten Instanzen in einer statischen Liste speichern.
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Ist das keine Antwort auf die Frage? Es gibt Klassen, die können sich mit anderen verbinden, dazu müssen sie wissen welche Instanzen verfügbar sind. Das mache ich mit meinem InstanceLister.EDIT: Weil du danach gefragt hast: Diese Klasse wird unter anderem in meinem Pin-System (Event Based Components) verwendet. Diese Instanzliste soll ein Pool darstellen, mit dessen Elementen sich verknüpft werden kann. Letztendlich werde ich dieses System noch woanders verwenden, weil es auch da einen Pool gibt...
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
public class InputPin<T> : InstanceLister<InputPin<T>>, IInputPin where T : Value, new() { } public class OutputPin<T> : InstanceLister<OutputPin<T>>, IOutputPin where T : Value, new() { } public class ControllerViewModel<T> : ObservableObject, IControllerViewModel where T : Value, new() { // Eigenschaften public ObservableCollection<OutputPinViewModel> RowHeaders { get; set; } public ObservableCollection<InputPinViewModel> ColumnHeaders { get; set; } public ObservableCollection<ConnectionViewModel> MatrixElements { get; set; } // Konstruktor public ControllerViewModel() { RowHeaders = new ObservableCollection<OutputPinViewModel>(); ColumnHeaders = new ObservableCollection<InputPinViewModel>(); MatrixElements = new ObservableCollection<ConnectionViewModel>(); InputPin<T>.Instances.CollectionChanged += Pins_CollectionChanged; OutputPin<T>.Instances.CollectionChanged += Pins_CollectionChanged; GenerateMatrix(); } // Methoden private void Pins_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { GenerateMatrix(); } private void GenerateMatrix() { // Reset RowHeaders.Clear(); ColumnHeaders.Clear(); MatrixElements.Clear(); foreach (var ip in InputPin<T>.Instances) { // Spaltenüberschriften erzeugen ColumnHeaders.Add(new InputPinViewModel(ip)); } int Row = 0; foreach (var op in OutputPin<T>.Instances) { // Zeilenüberschriften erzeugen RowHeaders.Add(new OutputPinViewModel(op)); // Matrixeinträge erzeugen int Column = 0; foreach (var ip in InputPin<T>.Instances) { MatrixElements.Add(new ConnectionViewModel<T>(Row, Column, ip, op)); Column++; } Row++; } } } |
Was heißt das? Wenn ich im Netz nach dieser Meldung suche, dann bekomme ich zahlreiche Informationen über Backgroundworker und OCs in mehreren Threads. Dass der Destruktor aus einem anderen Thread aufgerufen wird, mag ja sein, aber was kann ich schon dagegen tun?Zitat
Ausnahme ausgelöst: "System.NotSupportedException" in PresentationFramework.dll
Zusätzliche Informationen: Von diesem CollectionView-Typ werden keine Änderungen der "SourceCollection" unterstützt, wenn diese nicht von einem Dispatcher-Thread aus erfolgen.
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Werbeanzeige