Laden...
Avatar #PECF2Z0svbFS1La0BT5x.jpg
thetruedon myCSharp.de - Member
Fachinformatiker für Anwendungsentwicklung, Staatlich geprüfter Technischer Assistent für Informatik Dabei seit 11.10.2011 111 Beiträge

Forenbeiträge von thetruedon Ingesamt 111 Beiträge

30.11.2011 - 15:33 Uhr

Das werde ich machen. Vielleicht finde ich eine angenehme Variante die dazu passt das wichtigste ist eigentlich dass auf allen Rechnern das selbe Programm läuft und man nicht einen extra auswählen muss, der Server ist und sich der Rest da anmeldet wie es früher bei LAN Spielen z.B. üblich war. Möglichst eher so ich sende den Kram und wenn das Programm existiert und offen ist kommt was an und wenn nicht dann eben nicht. Broadcast triffts da ja
Danke erst mal 😃

30.11.2011 - 14:56 Uhr

Hallo
Ich suche schon ein Weilchen akribisch nach der Grundlegenden Art und Weise, wie man von einem Programm auf andere zugreifen kann.
Dafür folgendes sehr vereinfachtes Szenarium. Ich habe eine Anwendung. Dort gebe ich einer Property (z.B. ein string) einen wert.
Auf dem Formular ist eine Textbox oder Ähnliches und ein Button.
Dieses Programm wird mehrfach geöffnet (jeweils mit einem anderen wert in der Property die kann man von mir aus ja von außen eingeben lassen) (ob auf einem Rechner oder in einem Netzwerk ist erst mal egal). Wenn ich jetzt bei irgendeinem davon auf den Button klicke soll bei allen stehen dass der Button geklickt wurde und die Property damit man sehen kann wer diesen Button geklickt hat.
Ich habe schon auf meiner Recherche was von Pipes gehört jedoch weiß ich nicht viel damit anzufangen. Das ganze soll jedoch so geregelt sein dass jederzeit ein weiteres fenster geöffnet bzw geschlossen werden kann ohne dass da ein Fehler auftritt.
Das ganze erinnert stark an ein Chatprogramm soll aber für etwas völlig anderes verwendet werden.
Ist das Grundsätzlich möglich ohne einen Server bei dem sich alle Instanzen quasi verbinden müssen oder ohne ein Programm explizit als server zu kennzeichnen weil wenn das geschlossen würde, würde ja das ganze nicht mehr klappen

14.10.2011 - 08:07 Uhr

Ja naja ich bekomme ja alle Abgeleiteten Typen von Node indem ich Prüfe ob Node in der Parent Liste steht darum brauche ich nur diese GUID
Und da Node Praktischerweise Abstrakt ist wird es mit herausgefiltert aber das war ja nicht mein Problem

Ich denke mal den Thread kann man als gelöst schließen.?

13.10.2011 - 15:28 Uhr

Aber es scheint zu funktionieren
Es filtert in meinem Fall Listen, enums, und ein Paar andere von Object abgeleiteten Klassen raus. Ich gucke quasi nur ob die GUID von Node in dem Array auftaucht und die von Node ist doch immer gleich dafür ist es doch eine ID oder hab ich das falsch verstanden?

Aber das hier geht auch sehe ich grad

public Type[] GetTypeArray(Type parentType) //um es etwas universeller zu machen aber es wird typeof(Node) übergeben
        {
            var assem = System.Reflection.Assembly.GetExecutingAssembly();
            var TypeArr = assem.GetTypes();
            List<Type> TypeList = new List<Type>();

            foreach (Type token in TypeArr)
            {                 
                List<Type> li = ParentList(token);
                if (!token.IsAbstract && li.Contains(parentType)))
                    TypeList.Add(token);                
            }
            TypeArr = TypeList.ToArray();
            return TypeArr;
        }
13.10.2011 - 15:18 Uhr

Habe die Lösung ich vergleiche die GUIDs

public Type[] GetTypeArray()
        {
            var assem = System.Reflection.Assembly.GetExecutingAssembly();
            var TypeArr = assem.GetTypes();
            List<Type> TypeList = new List<Type>();

            foreach (Type token in TypeArr)
            {                 
                List<Type> li = ParentList(token);
                if (!token.IsAbstract && li[1].GUID == typeof(Node).GUID) 
                    TypeList.Add(token);                
            }
            TypeArr = TypeList.ToArray();
            return TypeArr;
        }

thx an euch berichtigt mich wenn ich was übersehen habe aber es scheint zu funktionieren

13.10.2011 - 09:07 Uhr

Hier mein Code
Ich habe also das TypenArray und gehe jedes Element durch und Prüfe ob es abstrakt ist (die will ich auch nicht haben aber das ist kein Problem) und ob das Letzte Element der Elternklassenliste Node ist. (Diese Liste wird Korrekt erstellt und wenn es von Node abgeleitet ist ist auch immer das letzte Element Node)

var assem = System.Reflection.Assembly.GetExecutingAssembly();
            var TypeArr = assem.GetTypes();
            List<Type> TypeList = new List<Type>();
            foreach (Type token in TypeArr)
            {               
                List<Type> li = ParentList(token); // hier wird die Liste mit den Eltern Klassen erstellt (Object wird dabei nicht mehr in die Liste geschrieben)
                if (!token.IsAbstract && li.Last() is Node) // li.Contains(Node) hab ich auch versuht ging aber nicht
                    TypeList.Add(token);
            }

So funktioniert es aber der Umweg über den Namen ist in meinem Fall aus verschiedenen Gründen zu vermeiden.


var assem = System.Reflection.Assembly.GetExecutingAssembly();
            var TypeArr = assem.GetTypes();
            List<Type> TypeList = new List<Type>();
            foreach (Type token in TypeArr)
            {                 
                List<Type> li = ParentList(token);                
                if (!token.IsAbstract && li.Last().Name == "Node")
                    TypeList.Add(token);                
            }
            TypeArr = TypeList.ToArray();
            return TypeArr;
        }
13.10.2011 - 08:37 Uhr

Hallo
Ich habe im Forum schon gesucht aber nichts gefunden was so richtig passt.
Folgendes Problem:

Ich habe ein Array bzw. Liste vom Typ 'Type'. Darin ist unter anderem eine Klasse 'Node' (abgeleitet von Object) und davon abgeleitete Klassen (u.a. auch wiederum von diesen abgeleitete). Bis hier hin klappt alles.

Jetzt will ich z.B. via Schleife jedes Element danach prüfen ob es in irgendeiner Weise von 'Node' abgeleitet ist. Wenn ja kommt das dann eben in eine neue Liste oder wird anderweitig verarbeitet.

Ich habe versucht das Element mit 'Node' zu vergleichen aber weder mit == noch Equals ging das da es keine Objekte oder Variablen sind. Und mit is kam die Nachricht dass es niemals vom Typ 'Node' sein wird.

Jedoch gibt es kaum Eigenschaften, in denen sich die Klassen unterscheiden, wie IsAbstract etc. ihr versteht. Und mit den Namen Strings zu hantieren ist nicht optimal.

Des weiteren habe ich auch bei jedem Element der Typenliste eine Weitere Liste in der die Vererbungsstruktur steht (z.B. bei dem Typ NodeNumber steht in dieser Liste: Object, Node, NodeNumber)
Falls das hilft und man nachprüfen kann ob sich der Typ 'Node' darin befindet.

11.10.2011 - 11:53 Uhr

Ja stimmt. Ich habe eine statische daraus gemacht und jetzt läuft das. Hätte ich eigentlich auch drauf kommen können aber ursprünglich war diese Eigenschaft keine Typspezifische. Letztendlich ist es aber eine geworden. Also ich danke euch vielmals. =)

11.10.2011 - 10:57 Uhr

Richtig Soweit hab ich schon gedacht.
Aber diese GetValue Methode verlangt einen Object Parameter.

pi = TypeArr.SelectMany(f => f.GetProperties().Where(p => p.Name.Equals("AlternateWritten")).Where(v => v.GetValue(OBJECT,null)=="xxx")).FirstOrDefault();

Ich weiß nicht, welches Objekt ich übergeben soll, denn ich möchte ja nach einem Typ suchen der eine Property mit einem bestimmten Wert hat und dann erst ein Objekt dieses Typs erstellen.
Vorher gibt es nur ein Array Welches 13 Typen enthält, die von einer abstrakten Klasse namens 'Knoten' abgeleitet sind. Keine Objekte.

11.10.2011 - 10:29 Uhr

Ja genau =) So in etwa wollte ich das machen. Dankeschön.
Jetzt muss ich nur noch eine Kleinigkeit wissen.
Ich möchte das Ganze noch genau einmal mehr Filtern.
Nämlich nicht nur nach dem Propertynamen, sondern zusätzlich soll es mir nur die zurückgeben, bei der das Ergebnis der Property (in dem Fall ein String) einen bestimmten Wert hat, der in der Variable 'AkBinOp' steht.

Also ich übergebe der Funktion die das ganze hier macht einen String ind bekomme nicht einfach nur die erste Propertyinfo zurück, die passt, sondern die erste, die zusätzlich auch noch bei der gesuchten Property den Wert, z.B. "xxx" enthält.

11.10.2011 - 08:29 Uhr

Hi

Ich habe folgendes Problem
Ich habe via

System.Reflection.Assembly.GetExecutingAssembly()

ein TypenArray erstellt (in dem u.a. die Knoten meines Operatorenbaum sind, welche eine Property enthalten die einen String zurückgeben)
Jetzt habe ich einen String den Suche ich in den Propertys im Array und wenn eine Übereinstimmtung kommt möchte ich das entsprechende Objekt erstellen. Aber es enthalten nicht alle Klassen dieses Arrays diese Property da sind noch andere dabei. (Falls das nötig und möglich ist könnte ich auch ein Array in dem nur die Knoten sind erstellen die sind alle von einer Klasse abgeleitet aber das müsste mir einer erklären^^)

Danke schon einmal im Vorraus