Hallo,
ich suche Rat wie ich eine Anforderung am besten lösen könnte. Folgendes Problem:
Ich habe zwei Klassen:
ClassA
{
public string Name{get; set;}
private List<ClassB> AttributCollection{get; set;}
}
ClassB
{
public int Id{get; set;}
public string Type{get; set;}
public string ValueString{get; set;}
}
Eine Collection von ClassA wird an einen GridView gebunden und in einer Spalte soll das Property Name angezeigt werden.
Name ist allerding nur als Property in ClassA enthalten, der Wert ermittelt sich aus dem ValueString eines bestimmten Element der AttributCollection (z.B. dem Element bei dem Type == "Name" ist).
Spontan sind mir zwei Lösungswege eingefallen die beide nicht so dolle sind.
1.
im getter von Name rufe ich ein Methode auf:
string getName()
{
AttributCollection.Find(ac=> string.Equals(ac.Type,"Name")).ValueString;
}
=> Performancesorgen!!!!
2.
ValueString wird um ein event "ValueStringChanged" erweitert und ClassA bindet sich an das Event des einzelnen Element in der AttributCollection. Wertänderungen in der Instanz von Class B würden in eine lokales Feld "name" übernommen. Das wäre glaueb ich ziemlich performant, da die Daten zum Zeitpunkt des Zugriffs bereits verfügbar sind.
hier gibt’s zwei Probleme:
Fällt Euch eine elegantere Lösung ein.
besten Dank
antoschka
sieht spannend aus. ich habe einzelne Kandidaten auf die greife ich sehr (!) häufig zu. Von daher könnte es sich durchaus lohnen.
Besten Dank für den Hinweis
Hallo,
ich bekomme über eine Socketverbindung einen Property- oder Methodennamen (bei letzterem plus der notwendigen Parameter) und muss dann diese bei einem Objekt aufrufen. Das Ganze muss einigermaßen flink funktionieren.
Der wenigste Code würde sicher mit Reflection entstehen, aber ich glaube das ist nicht so besonders schnell. Macht die Verwendung eines Mammut-Switches Sinn?? Was könnte man noch in Erwägung ziehen?
Besten Dank
antoschka
Ja und bei jeder Instanz wird dann das Framework hochgezogen, da das neue COM-Objekt ja mit einem managed code geschrieben wurde.
Das kostet Zeit die ich gern sparen möchte.
Besten Dank für Euer Feedback.
Bis dahin antoschka
Hallo,
ich habe ein Problem zwei Welten zusammen zu bekommen. Wir haben ein COM Objekt (in c++ unmanaged) welches sehr groß ist - eine Neuprogrammierung wäre sehr aufwändig. Teile dieses COM Objektes sollen nun eine c# Anwendung nutzen.
Das Problem ist, dass ein Anstarten der c# Anwendung viel zu lange dauert, das COM-Objekt muss sehr häufig auf die C# Anwendung zugreifen und auch beim erstzugriff würde ich gern ein bereits instanziertes Objekt nutzen wollen, um die Zeit des Hochziehen des .Net Frameworks in diesem Moement einzusparen. Deshalb würde ich die Anwendung gern beim Systemstart mittels Windows Service ausführen und dann vom COM-objekt aus auf diese Anwendung zugreifen. Naiv bin ich da auf folgende Lösungsansätze gekommen, weiß aber noch nicht wie ich vom COM Objekt aus auf die Anwendung zugreife.
in beiden Fällen weiß ich aber nicht wie ich vom COM Objekt aus eine Verbindung zu der Managed Anwendung/Service aufbau und diesen anspriche.
Habt Ihr da eine Idee???
besten Dank antoschka
So gesehen 100% d'accord.
Sagen wir also: beide Patterns ermöglichen die Auswahl unterschiedlicher Logik ....
Beste Dank noch einmal
antoschka
Ok, ich glaube ich habe es verstanden.
Geholfen hat mit die englische Version des Wikipedia-Artikels zum Bridge-Pattern gelesen habe ( Bridge Pattern).
Im dortigen Code-Beispiel stand der erhellende Code-Kommentar:
"low-level" bzw. "high-level"
@LaTino:
Bridge ist NICHT dafür da, dein gewünschtes Verhalten zu implementieren, sondern hilft dir, deine Klassen zu organisieren.
Aus meiner Sicht doch beides oder.
Besten Dank für Eure Hilfe und Euer Feedback - hat mir wirklich sehr geholfen!!!
antoschka
Ja, das habe ich auch schon probiert. Mein Problem ist folgendes. Das spezifische Control ist eine DateEdit aus einer Controlsbibliothek und während der Eingabe ist immer der ganze Block (Tag, Monat oder JAhr) ausgewählt, somit ist SelectionStart immer 0 egal an welcher Stelle sich der Eingabe Cursor befindet. Anforderung ist dass eine Eingabe ohne den Separatoen möglich sein muss (Bsp: 010109). Mein Intension war nun, dass wenn der Cursor an erste Stelle steht und die zweite Ziffer eingetragen wird der Cursor dann vom Tag Block auf Monatsblock springt (dito mit Monat zu Jahr). Der Monat beginnt tatsächlich bei SelectionStart = 2, nur dass ich leider nicht weiß wann der Cursor am Ende des Tagesblockes angekommen ist (bei Eingabe des Tages ist SelectionStart immer 0 da der Block immer markiert ist).
Muss mir wohl eine andere Möglichkeit suchen das Problem anzugehen. Dennoch finde ich es merkwürdig, dass man an diese Info so schwer (evtl. gar nicht) heran kommt. Zwischen SelectionStart und der Cursor Position kann aus unterschiedlichsten Gründen ein Unterschied bestehen.
Auf jeden Fall besten Dank für Eure Hilfe antoschka
Hallo,
ich habe ein Object-Instanz und würde diese in ein typesafe instanz einer meiner Klassen überführen. So eine Art TryParse ...
Das Problem tritt auf, weil ich eine Klasse erweitert habe und in einem Event nur die Superklasse erhalte. Ich weiß aber sicher, dass an dieser Stelle meine abgeleitet Klasse kommt und würde somit gern eine typesafe Instanz meiner eigenen Klasse erhalten.
Wie kann an das am Besten machen.
gibt es eine Möglichkeit mit Reflection o.ä.
den artikel habe ich auch gelesen. Da geht es aber um den Maus cursor.
Ich meinen eine z.B. Textfeld, in dem der Eingabecursor blinkt. Wenn an einer bestimmte Stelle eine Eingabe gemacht ist möchte ich den Eingabe Cursor woanders hin bewegen.
Besten Dank fürs Feedback
antoschka