Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von MarsStein
Thema: Übergabe statischer Variablen
Am im Forum: Grundlagen von C#

Hallo,

Dein erstes Snippet ist eine vollständige Konsolenanwendung.
Wenn dieses ausgeführt wird, wird automatisch deren Main-Methode aufgerufen.

Dein zweites Snippet ist offenbar eine WPF-Anwendung.
Wenn Du da jetzt einfach Deine Klasse aus dem Konsolenprogramm aufrufst, wird aber der Code in deren Main-Methode nicht ausgeführt, sondern die der WPF-Anwendung - und deshalb werden auch nie die statischen Member aktualisiert.

Es ist aber im allgemeinen nicht schön, so viel mit statischen Variablen und Methoden zu arbeiten. Ein vernünftiger objektorientoierter Ansatz wäre schöner.


Gruß, MarsStein

Thema: Amazon ermöglicht Live-Gesichtserkennung für ganze Städte
Am im Forum: Smalltalk

Hallo,

Zitat von Abt
Das heisst Du als Pessimist hast Deine Fingerabdrücke bereits chemisch entfernen lassen
auch wenn Du keine Antwort brauchst: Nein. Türgriffe werden ja auch nicht flächendeckend auf Fingerabdrücke untersucht, uind wann ich dort war sieht man auch am Abdruck nicht.
Zitat von Abt
Du unterstellst mir damit, dass ich als Befürworter eines trainierten Systems damit auch gleichzeitig der Befürworter eines Überwachtungsstaats bin.
Mitnichten - Du unterstellst mir, Dich damit persönlich gemeint zu haben.

Ich bezog mich aber nicht auf ein trainiertes System, wie Du es beschrieben hast, sondern auf eines, dass als Pranger fungieren könnte, und einen deshalb schon auch dann erkennen muss, wenn man nicht explizit als Gefährder oder was auch immer dort hineingeladen wurde. Und auch dafür finden sich hier Befürworter, und ja auch offensichtlich (anderswo) schon Umsetzungen!
Zitat von Abt
Du vergleichst in einem Atemzug dieses Werkzeugs mit einem totalitärem Staat - den es sowieso nicht interessiert, was die Gesellschaft sagt.
Sorry, wieder knapp daneben.
Ich sage, dass ein solches Werkzeug (also so eines, bei dem jeder Bürger quasi "bekannt" ist) es leichter Macht, in Richtung eines totalitären Staates zu laufen, und einem solchen auch hervorragend zur Machterhaltung dienen kann. Ich habe niemals behauptet, dass jedes System zwangsläufig totalitär wird, wenn es eine flächendeckende Überwachung gibt.
Ich schliesse aber genausowenig aus, dass das auch hier in Deutschland passieren könnte.
Zitat von Abt
Wenn man aber sich nur auf die negativen Punkte stürzt und nur, einzig und allein *Gefahren der technischen Möglichkeit* anschaut
Auch das tue ich nicht. Das habe ich ja nun schon vielfach erwähnt.
Ich halte es aber für noch viel schlimmer, diese Aspekte überhaupt nicht wahrzunehmen oder zu diskutieren. Es gilt, beide Seiten zu beleuchten und ein vernünftiges Maß zu finden. Auch das hatte ich bereits weiter oben geschrieben.

Ich verstehe also nicht, warum mir jetzt das Wort im Mund herumgedreht wird. Da wir aber jetzt an einem solchen Punkt angekommen sind - hat es für mich auch keinen Sinn mehr, hier weiter zu diskutieren --> ich bin damit hier raus.

Gruß, MarsStein

Thema: Amazon ermöglicht Live-Gesichtserkennung für ganze Städte
Am im Forum: Smalltalk

Hallo,

Dass ich das Ganze durchaus differenziert sehe, und es sehr stark davon abhängt, wie solche Massnahmen umgesetzt werden, habe ich ja bereits oben beschrieben.

Zitat
Dazu müsste es aber eine flächendeckende Überwachung geben, was in Deutschland überhaupt nicht gesetzlich abgedeckt ist und hier ständig in den Himmel gemalt wird.
Eben. Wobei man als Pessimist sagen würde: noch nicht.
Einen "Pranger" wie er oben genannt wird, liesse sich mit dem von Abt genannten Konstrukt ja überhaupt nicht realisieren.
Aber die Tatsache, dass es hier selbst für sowas Befürworter gibt, zeigt schon, dass es immer Leute geben wird, denen das noch nicht reicht, die immer noch mehr Überwachung bis zur Grenze des technisch machbaren hin haben wollen. Und die Sicherheitsbehörden werden sich fürchterlich beschweren, wenn das dann nicht umgesetzt wird.
Und das lehne ich eben rigoros ab, und da ist es durchaus legitim, auch mal die Zukunft etwas dunkler auszumalen.

Das Beispiel der Türkei von trib finde ich da sehr passend: Wenn wir einer Regierung vertrauen und als Gesellschaft zulassen, dass der Staat solche Werkzeuge in die Hand bekommt, dann werden auch den nachfolgenen Regierungen diese Werkzeuge zur Verfügung stehen. Und dann kann es ganz schnell düster werden.

Wie gesagt, der Ton macht auch hier die Musik. Und dass es nicht ausartet, sind solche Diskussionen eben wichtig, um schon den Anfängen zu wehren!

Gruß, MarsStein

Thema: Amazon ermöglicht Live-Gesichtserkennung für ganze Städte
Am im Forum: Smalltalk

Hallo,

der Verglaich hinkt gewaltig.
Wenn jemand mich zufällig auf einem Video aufnimmt, dann mag das eben so sein, und dagegen machen kann ich auch nichts. Dann hat derjenige ein Video auf dem ich zu sehen bin. Und veröffentlicht es vielleicht sogar. Er weiss aber nicht, wer ich bin, wo ich vorher wa ru nd was ich danach mache.
Das ist aber ein ganz anderer Aspekt als eine flächendeckende Kameraüberwachung mit Gesichtserkennung. Das ist eher so als würde mir - und nicht nur mir, sondern allen - ständig jemand hinterherlaufen, der mich bei allem was ich so mache filmt, und der kennt mich auch noch und legt alles geordnet unter meinem Namen ab. Ich kann mir nicht vorstellen, dass die rechtliche Situation jemandem heute ein solches Vorgehen erlaubt.
"Lauf einfach nicht über den Platz" ist dann auch keine Option, vor allem wenn um die Ecke schon die nächste Kamera hängt.

Gruß, MarsStein

Thema: Kennt jemand einen kostengünsten Mini-Monitor mit HDMI für ein Point of Sale?
Am im Forum: Smalltalk

Hallo Gü,

PoS = Point of Sale.

Also wahrscheinlich eine Art von Kassensoftware, mit Bondrucker-Anschluss, ggf. Kassenschublade etc.

Gruß, MarsStein

Thema: Funktionen/Methoden in Konsole bzw. Forms
Am im Forum: Grundlagen von C#

Hallo,

Zitat von inflames2k
Die Program-Klasse ist statisch, da dies die Einstiegsklasse für das Programm ist (Gilt übrigens auch bei Forms-Apps).
Oder genauer, die Main-Methode muss als Einstiegspunkt in das Programm statisch sein.
Bei der Program-Klasse muss das nicht so sein (und ist es im Beispiel aus dem ersten Post ja auch nicht).

Grundsätzlich brauchst Du aber immer eine Objektinstanz, wenn Du auf etwas nicht statisches zugreifen willst - und das ist auch der Regelfall, viel static Code ist zumindest ein Indiz für schlechtes Design.

Grundsätzlich kann man aber auch die Program-Klasse instanzieren:

    class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program(); // Instanz erstellen...
            p.SayHello();                        // ...und darüber zugreifen.
            Console.ReadKey();
        }

        void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }

Gruß, MarsStein

Thema: Amazon ermöglicht Live-Gesichtserkennung für ganze Städte
Am im Forum: Smalltalk

Hallo,

Zitat von Abt
D.h., dass die Videoüberwachung von öffentlichen Plätzen Deutschland sofort zum Überwachungsstaat macht?
Nein, das habe ich auch nicht behauptet. Es ist immer eine Frage des WIE.
Wenn da Kameras hängen und wenn etwas passiert, wertet man die Bilder aus und ansonsten wird alles nach kurzer Zeit wieder gelöscht, und es bekommt auch keiner Zugriff auf die Daten außer bei konkretem Bedarf - das mag ggf. OK sein.
Wenn aber in Echtzeit mitgetrackt wird, wer sich wann wo aufhält, mit wem er sich trifft, welche Läden er aufsucht etc., das dann auch noch "für spätere Verwendung" aggregiert und für längere Zeit gespeichert wird, und/oder die Zugriffsvorbehalte schwammig sind: Ja, dann sind wir dem Überwachungsstaat IMO schon sehr nahe.

Gruß, MarsStein

Edit:
Zitat
Das heisst pauschal, dass der Staat automatisch die sicher(er)en Infrastrukturen hat?
Nein, das heisst das er welche haben soll oder müsste. In private Hände (oder die der Privatwirtschaft) dürfen diese Daten IMO niemals gelangen. Solange man darauf als Staat angewiesen ist, bedeutet das für mich pauschal, dass man tunlichst die Finger davon lassen sollte. Private Unternehmen haben nämlich im Gegensatz zum Staat weder die Aufgabe Freiheit noch Sichheit zu gewährleisten, und somit in meinen Augen keinerlei Berechtigung auch nur entfernt in die Nähe solcher Daten zu gelangen.

Thema: Amazon ermöglicht Live-Gesichtserkennung für ganze Städte
Am im Forum: Smalltalk

Hallo zusammen,

erstmal allgemein:
Wenn ich hier teilweise die Posts so lese, bin ich schon erschrocken darüber, dass es offenbar Leute gibt, denen eine Welt ähnlich Orwell's Vision tatsächlich erstrebenswert zu sein scheint :(

So, jetzt noch ein paar Gedanken von mir (und auch wenn ich jetzt Abt zitiere - Du warst mit dem einleitenden Satz garnicht unbedingt gemeint)

Zitat von Abt
Jeder Bürger jedes Staates hat das Recht auf Sicherheit. Ein Staat hat die Pflicht den Bürgern Sicherheit zu gewährleisten.
Ja - aber eben nicht um jeden Preis. Im Grundgesetz sind jedenfalls gewisse Freiheitsrechte enthalten.
Der Bundestag hat dazu mal eine Veröffentlichung gemacht, ist schon ein paar Jahre älter:
Zum "Grundrecht auf Sicherheit"
Da ist unter anderem Folgendes zu lesen (Kapitel 4):
Zitat
Nach der Rechtsprechung des Bundesverfassungsgerichts sollen die Grundrechte in
erster Linie die Freiheitssphäre des Einzelnen gegen Eingriffe der staatlichen Gewalt schützen und ihm insoweit die Voraussetzungen für eine freie aktive Mitwirkung und Mitgestaltung im Gemeinwesen sichern. In dieser Abwehrfunktion entsprechen sie den Menschenrechten der ersten Generation, wie sie sich in der Ideenwelt der Aufklärung und des Liberalismus entwickelt haben.
Nicht zuletzt aufgrund der Erfahrungen im Nationalsozialismus mit einem allmächtigen Staat, der die Menschenrechte aufs Tiefste verachtete, wurden die Grundrechte des Grundgesetzes 1949 als solche Abwehrrechte konzipiert. Die Grundrechte sind daher dazu bestimmt, die Freiheitssphäre des Einzelnen vor Eingriffen der öffentlichen Gewalt zu sichern; sie sind Abwehrrechte des Bürgers gegen den Staat.

Das kann ich durchaus nachvollziehen, und es geht eben auch ganz eindeutiog daraus hervor, dass der Bürger hier durch gewisse Rechte vor dem Staat geschützt werden soll - und das auch mit einer nicht von der Hand zu weisenden Begründung.
Wenn der Staat nun also so vertrauenswürdig ist, wie hier teilweise kolportiert wird, dann können wir uns die Freiheitsrechte ja auch ganz sparen - die hindern den Staat ja nur bei seinen wichtigen Aufgaben, und braucht ja keiner, weil der Staat ja niemals etwas Falsches tun wird... Herzlich willkommen im nächsten totalitären System.

Den Seitenhieb auf Reichsbürger/Anti-Staat kann ich nicht wirklich nachvollziehen.
Wenn die Reichsbürger das sagen hätten und dürften wie sie wollten, hätten wir bestimmt bald schon die Totalüberwachung. Und eine Anti-Staats-Haltung kann ich da auch nicht ausmachen, eher dass sich hier die Leute mit dem hier auseinandersetzen:
Zitat von Abt
Dass neue Technologien nur Vorteile haben, das ist eine völlige Utopie.
Das ist aber Teil des gesellschaftlichen Wandels.
und dabei Überlegungen anstellen, wie man zwischen den beiden Extremen Rund-um-die-Uhr Totalüberwachung und gar keinen technischen Mögklichkeiten für den Staat versuchen kann, diesen Wandel eben in vernünftige Bahnen zu lenken. Denn die Extreme sind jeweils für sich aus meiner Ansicht als Wahnsinn zu bezeichnen.

Und noch etwas zum ursrpünglichen Artikel über Amazon und seine Technologie:
Solange diese Daten von einer privaten Firma ausgewertet werden (und im Artikel steht, dass das eben genau bei Amazon passiert), ist das ein absolutes No-Go für mich. Da müsste dann schon eine andere Infrastruktur geschaffen werden, die private Unternehmen komplett und sicher aussperrt.

Und selbst wenn man sich den Kameras nicht verschliessen mag (ich selbst bin zwar auch kein Freund davon) - was soll das Tracking mit Gesichtserkennung in Echtzeit? Das ist weit übers Ziel hinausgeschossen!! Selbst wenn es überall Kameras gäbe, würde es reichen, das Bild-/Videomaterial dann zu sichten, wenn irgendwo etwas vorfällt. Denn in Echtzeit was verhindern kann man durch das Echtzeit-Tracking noch lange nicht - das dient in meinen Augen nur absolut überzogener Überwachnung/Schnüffelei.

Gruß, MarsStein

Thema: Wie kann ich ein Datum addieren/subtrahieren bei Button-Click
Am im Forum: Grundlagen von C#

Hallo,

ok, da fehlen Dir noch ordentlich Grundlagen, also:
leg Dir das anzuzeigende Datum als Member in der Klasse an.
Beim Klick änderst Du dann diesen Member und zeigst auch immer nur diesen an.

Also in der Art

class MyForm
{
...
    DateTime _displayDate = DateTime.Now;

    private void button2_Click(object sender, EventArgs e)
    {
        displayDate = displayDate.AddDays(1);
        LblAnzeige.Text = "Heute ist : " + _displayDate;
    }
...
}

Gruß, MarsStein

Thema: Wie kann ich ein Datum addieren/subtrahieren bei Button-Click
Am im Forum: Grundlagen von C#

Hallo,

Zitat
allerdings weiß ich nicht wie ich danach suchen soll.
Naja, die Doku ist im allgemeinen eine gute Anlaufstelle...
Dort findet sich z.B. die DateTime.AddDays-Methode, die für Deinen Zweck wie geschaffen ist

Gruß, MarsStein

Thema: Object von Window zu Window weiter geben
Am im Forum: GUI: WPF und XAML

Hall,

Zitat von ThomasE.
Ich teilte meist die VM's in 2 Kategorien, nur schauen und bearbeiten können.
Was ja je nach Art und Anzahl der Daten auch völlig in Ordung und richtig ist - ich würde das halt nur nicht pauschalisieren.
Zitat von ThomasE.
Kann mir durchaus vorstellen, daß das mit dem VM's teilweise in meinen Fällen sehr praktisch gewesen wäre, das stimmt...
Eben - bei kleinen Datensätzen in einer überschaubaren Anzahl kann man's halt gerne auch anders machen.
Das wiederspricht aber deshalb nicht MVVM.
Zitat von ThomasE.
Also da hätte ich gerne ein einfaches Beispiel, denn ich habe bisher keine für mich zufriedenstellende Lösung gefunden, vielleicht bin ich auch zu penibel ;)
Naja, ehrlich gesagt nehme ich das auch nicht immer so ganz genau. Es geht aber schon.
Im Prinzip ist die Art, wie die Daten angezeigt werden, Logik der View. Meistens kann man sowas ja einfach über geeignete Bindings, DataTemplates etc. steuern. Nur wenn ein neues Fenster aufgemacht wird, klappt das eben nicht mehr so richtig.
Da kann man jetzt verschiedene Ansätze verfolgen:
  • Man kann sich direkt im Code behind an Events aus der View - also irgendwelcher Controls - hängen.
    Und bevor mich jetzt jemand für diese Aussage steinigt: Ich bin durchaus der Auffassung, dass es sich dabei, die Art der Anzeige zu realisieren, um View-Logik handelt und dort implementiert werden darf.
  • Man kann aber auch ganz normal mit Commands im VM arbeiten, und von dort aus ein eigenes Event (in dem konkreten Fall z.B. ein "EditRequested" feuern, das man entsprechend in der View abonniert.
    Auch dabei wird man das im Code behind tun müssen, hat aber den Vorteil, dass man im VM bei Bedarf noch zusätzliche Logik ausführen kann.
  • Bei größeren oder verschachtelten Projekten, wo man das gleiche Fenster von mehreren Stellen her öffnen möchte, kann man aber auch eine Art ViewManager nutzen, den man vom ViewModel aus (als Interface) aufruft und der sich dann darum kümmert, dass das richtige Fenster aufgeht. Dann hat man das auch vom ViewModel sauber getrennt.
  • Oder man verpasst den Fenstern noch ein passendes Interface und lässt sie sich ganz banal von einem DI-Container auflösen - was wiederum ziemlich nah an den vorher erwähnten ViewManager rankommt.
Hat alles so seine Pro und Contra, und ich weiss nicht, ob man da eine pauschale Empfehlung geben kann. Da muss man sich wirklich den Einzelfall anschauen. Aber möglich ist es allemal.

Gruß, MarsStein

Thema: Object von Window zu Window weiter geben
Am im Forum: GUI: WPF und XAML

Hallo ThomasE.,

ja - und? Ich sehe ehrlich gesagt den Punkt nicht.
wenn ich dieselben Daten in mehreren Views anzeigen will, und habe dafür schon ein ViewModel, dann kann ich es doch auch benutzen.
Genau genommen wird das ViewModel ja nicht hin und her verschoben, sondern einfach einer weiteren View bekanntgemacht.

Stell DIr vor Du hast eine ListView, in der Du Daten einzeilig in Kurzform anzeigst, und einen Bereich, in dem Du das selektierte Item bearbeiten kannst (also klassisch Master-Detail).
Dazu hast Du für gewöhnlich an die ListView eine ObservableCollection<ItemVM> gebunden, und das selektierte Item wird an beiden Stellen angezeigt.
Nun lagerst Du die Detail-View in ein separates Fenster aus. Und deshalb musst Du jetzt dem neuen Fenster das Model geben, woraus ein neues VM erzeugt wird, statt wie bisher einfach das gleiche VM zu benutzen?
Das macht die Sache unnötigerweise ganz schön kompliziert, vor allem die Synchronisation der Anzeige. Also wozu das Ganze?

Wenn ich die gleichen Daten in mehreren Views brauche, verwende ich auch wenn es geht dasselbe VM, wenn es sich für beide Views eignet. Und zwar unabhängig davon, ob das nun in einem anderen Fenster oder im Gleichen ist.

Die Erzeugung des Fensters im VM ist hier IMO viel eher etwas, was gegen MVVM verstößt, da das ViewModel hier die View (das neue Fenster) kennen muss, um es anzuzeigen. Das könnte man anders lösen, so dass das VM keine Ahnung von irgendwelchen Views haben muss.

Gruß, MarsStein

Thema: Reactive Extensions (RX) in WPF: Erfahrungen und/oder Bewertungen?
Am im Forum: GUI: WPF und XAML

Hallo,

wir benutzen RX bei uns an sehr vielen Stellen bis hoch zur ViewModel-Ebene (aber nur sehr wenig auf View-Ebene) und sind damit auch sehr zufrieden.

Gruß, MarsStein

Thema: Object von Window zu Window weiter geben
Am im Forum: GUI: WPF und XAML

Hallo,

Zitat
Bricht das nicht das MVVM?
Nein, warum?
Man benutzt ein und dasselbe ViewModel um es in 2 verschiedenen Views (hier: einem UserControl und einem Window) anzuzeigen.
Was sollte da das MVVM brechen?

Gruß, MarsStein

Thema: Thread.Join() Funktion bzw. Alternative
Am im Forum: Grundlagen von C#

Hallo,

... oder button_copy_Click als async deklarieren, und jeweils den Teil

                            Thread dc1 = new Thread(delegate () { DirectoryCopy(textBox_directorySource.Text, ogt, true); });
                            dc1.Start();
                            dc1.Join();
 
ersetzen durch

await Task.Run(() => DirectoryCopy(textBox_directorySource.Text, ogt, true));

@metroid, schau Dir lieber gleich async/await und Tasks an, für sowas würde man heute besser keine Threads mehr nehmen.

Gruß, MarsStein

Thema: Alle unterstützten Auflösungen ermitteln
Am im Forum: Grafik und Sound

Hallo,

habe gerade gesehen, dass Du auch einen Projekt-Thread hast in dem Du mit XNA arbeitest.
Falls das hier auch zutrifft, geht es offenbar auch einfacher:
Get the supported screen resolutions in XNA?

Gruß, MarsStein

Thema: Alle unterstützten Auflösungen ermitteln
Am im Forum: Grafik und Sound

Hallo,

das ist AFAIK im .NET-Framework (immer noch) nicht drin.
Hier eine schon etwas ältere Lösung, die über die mittelss p/Invoke über die Winapi funktioniert:
How to list available video modes using C#?
Hth

Gruß, MarsStein

Thema: Whatsapp Anrufe aufnehmen, wie macht man das? (Samsung Galaxy S7, Android)
Am im Forum: Smalltalk

Hallo,

@MrChangeLog, Stefan.Haegele
die Handhabe, den Thread offenzulassen, entspricht durchaus dem, was hier im Forum seit langen Jahren praktiziert wird (auch schon zu Zeiten als ich noch Mod war). Das hat nichts mit angesehem Mitglied oder dergleichen zu tun.
herbivore hat es mal im Zusammenhang mit Keyloggern auf den Punkt gebracht: superKeylogger - A Keylogger component for c#
Hier ist es ähnlich - per se ist die angefragte Funktion nicht unbedingt verboten oder illegel. Bei etlichen Fragen zu Bots, die hier geschlossen wurden, ist das schon was anderers. Jedenfalls meiner Ansicht nach.

Gruß, MarsStein

Thema: Umschulung zum C# Developer - 2 Jahres Plan?
Am im Forum: Smalltalk

Hallo,

ich habe auch so eine Ausbildung als FI-AE gemacht.

Wenn ich mir hier die Inhalte anschaue, erinnert mich der erste Bildungsträger am ehesten an das, was wir damals gemacht haben, und sollte auch die Inhalte für eine IHK-Prüfung abdecken.
Bei mir war's halt damals C++, aber C# war da auch gerade erst rausgekommen.

Der zweite Bildungsträger - das würde ich mir gut überlegen. Da hast Du nachher einen Haufen Zertifikate (wobei die ganzen MCTS die Grundbedingung sind, um überhaupt die MCPD/MCSD machen zu können), von denen zwiefelhaft ist, ob sie Dir was bringen. Ich hab davon auch irgendwann eine ganze Menge gemacht, aber erst später, als ich schon im Beruf war: Denn oft ist es so, dass Arbeitgeber, die diese Zertifikate unbedingt wollen, ihre Leute selbst dementsprechend schulen (lassen) und dann zu der Zertifizierung schicken (so war es zumindest bei mir).

Der dritte Bildungsträger scheint auch eher "normale" Ausbildungsinhalte zu haben, allerdings erscheint mir das etwas Systemintegrationslastig (z.B. auch Cisco CCNA, als Anwendungsentwickler braucht man das eig. nicht).

Gruß, MarsStein

Thema: Beim Programmstart eine von zwei Methoden über einen Delegaten ausführen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat von Abt
AnyDotNetDelegate : System.MulticastDelegate : System.Delegate ist der Aufbau in .NET.
Ja, so gesehen schon. Allerdings ist das für den Benutzer von Delegaten nicht relevant,
denn die Doku sagt dazu:
Zitat von MSDN
The T:System.Delegate class is the base class for delegate types. However, only the system and compilers can derive explicitly from the T:System.Delegate class or from the T:System.MulticastDelegate class. It is also not permissible to derive a new type from a delegate type.

Most languages implement a delegate keyword, and compilers for those languages are able to derive from the T:System.MulticastDelegate class;
Das ist also alles (zumindet momentan) reine Infrastruktur, an die man als Benutzer niemals drankommt, ohne sich den Compiler anzupassen.
Zitat von Abt
Mir wäre jedenfalls spontan kein Delegate bekannt, das direkt auf System.Delegate basiert.
Den wird es Aufgrund des aus der Doku zitierten Sachverhalts wohl auch nicht geben.
Zitat von Abt
Der Unterschied bleibt - und ich bleib dabei, dass die 100% in diesem Kontext nicht korrekt sind ;-)
Aufrgund der puren Existenz von System.Delegate: einverstanden.
Erzeugen kann man sowas aber nicht, und eine Relevanz für den Benutzer von Delegaten ist damit IMO auch nicht gegeben.

Dann können wir uns vielleicht darauf einigen, dass kein Unterschied zwischen Action und irgendwelchen anderen Delegattypen besteht, die man zu Zeit im Code erzeugen oder direkt benutzen kann.

Gruß, MarsStein

Thema: Beim Programmstart eine von zwei Methoden über einen Delegaten ausführen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat
Nicht 100%.
Eine Action ist ein *multicast* delegate.
Daher kann man mit Actions ziemlich fancy Zeugs machen, das ein *simples* Delegate so überhaupt gar nicht hergibt.
Ich bleibe bei 100%, zumindest im Bereich C#/.NET, und darüber reden wir ja hier.
Was wäre sonst ein Beispiel für so ein *simples* Delegate?
Du schreibst ja selbst:
Zitat von Abt
In .NET ist es aber so, dass alle Delegaten an für sich potentiell eine Multicast-Funktionalität haben.
Da würde ich sogar "potentiell" streichen. Alle Delegates sind multicastfähig.

Siehe z.B. auch Multicast-Delegaten: Auswertung aller Rückgabewerte und Abbruchmöglichkeit.
Das funktioniert prinzipiell mit jedem Delegate. Ob eine Delegate multicast ist, hängt allein von der Verwendung ab.

Gruß, MarsStein

Thema: Beim Programmstart eine von zwei Methoden über einen Delegaten ausführen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat von T-Virus
Ob eine Action der bessere Ansatz wäre, darüber kann man streiten.
Ich würde hier auch ein Delegate bevorzugen.
@T-Virus
vorweg, ich denke, das was jetzt folgt, ist DIr alles bekannt.
Totzdem hast Du Dich da unglücklich ausgedrückt, daher hier nur zur Klarstellung für die Nachwelt:

Die Deklaration von Action lautet:

public delegate void Action();
Action IST also nichts anderes als ein Delegate.

Daher gibt es in der Verwendung auch absolut keinen Unterschied zwischen Action und einem beliebigen selbst definierten Delegaten ohne Parameter und Rückgabetypen.

Wenn man einen Delegaten definieren will, der keinen Parameter und keinen Rückgabewert hat, kann man sich das also in aller Regel sparen, weil es eben schon Action gibt.
Für parametrisierte Delegaten und Delegaten mit Rückgabetyp gibt es enstsprechende generische Ausprägungen von Action<...> und Func<...>.

EIgene Delegattypen braucht man nur, wenn die vordefinierten Varianten eben nicht ausreichen, oder man man unbedingt einen anderen Namen haben will (was natürlich durchaus auch sinnvoll sein kann, um die Semantik auszudrücken).

Ein Unterschied besteht aber darin, dass es sich bei jedem Delegaten um einen eigenen Typen handelt.
Habe ich also z.B. eine Funktion, die einen Delegaten annimmt, wird dieser Unterschied deutlich:

public void DoSomethingWithAction(Action action)
{
...
}

public delegate void MyDelegate();
public void DoSomethingWithMyDelegate(MyDelegate delegate)
{
...
}

public void TheMethodUsedForDelegate()
{
}

public void TheCallingMethod()
{
    Action action = TheMethodUsedForDelegate;
    MyDelegate myDelegate = TheMethodUsedForDelegate;

    // folgende Aufrufe funktionieren:
    DoSomethingWithAction(action);
    DoSomethingWithMyDelegate(myDelegate);

    // folgende Aufrufe funktionieren nicht (falscher Typ):
    DoSomethingWithAction(myDelegate);
    DoSomethingWithMyDelegate(action);

    // die verwendete Methode direkt zu übergeben, funktioniert aber für beide Aufrufe:
    DoSomethingWithAction(TheMethodUsedForDelegate);
    DoSomethingWithMyDelegate(TheMethodUsedForDelegate);   
}
Ähnlich verhält es sich bei genrischen Typeinschränkungen auf die Delegattypen.

Wenn man diese Typsicherheit haben will, braucht man also auch eigene Delegaten. Das ist aber IMO eher selten der Fall.
Im vorliegenden Beispiel aus dem Startpost sehe ich diesen Bedarf nicht.

Gruß, MarsStein

Thema: Auf Übergeordnete Eigenschaften zugreifen
Am im Forum: Grundlagen von C#

Hallo,

Zitat
Nur wie sonst schafft man eine saubere Trennung?
Könnte man z.B. auch über ein Interface lösen:

interface IStatusHolder
{
    int Status { get; }
}

class Basisklasse: IStatusHolder
{
...
}

class EinzelnesElemente
{
    private IStatusHolder StatusHolder { get; set; }
    EinzelnesElemente(IStatusholder statusHolder)
    {
        StatusHolder = statusHolder;
    }

    public string StatusAbfragen()
    {
        return Convert.ToString(StatusHolder.Status);
    }
}

Dann ist es vollkommen egal, ob der Status von Basisklasse osder sonst irgendwoher kommt. Eine feste Kopplung gibt es nur noch zum Interface.
Und dann kann man sich überlegen, ob IStatusHolder bereits auch ein INotifyPropertyChanged ist, um sich - wie von FZelle vorgeschlagen - über Änderungen benachrichtigen zu lassen.

Gruß, MarsStein

Thema: Henne-Ei-Problem in Bezug auf Sicherheitsfunktionen
Am im Forum: Rund um die Programmierung

Hallo,

Zitat
Doch dann gibt es leider Anforderungen an den untersten Layer (im Bild: der Kernel), die ebenfalls irgendwie einer Rechteprüfung unterliegen müssen.
Damit besteht also in jedem Fall eine Abhängigkeit zwischen Kernel und Rechteprüfung. Da kommst Du nicht drum herum.
Das Problem lässt sich also eingrenzen auf 2 Fälle:

1. Die Logik wird direkt in dem Kernel Layer implementiert.
2. Die Logik wird in einem abgesetzten Dienst/Modul implementiert, der sowohl vom Kernel als auch Anwendungen verwendet werden kann.

Logisch wäre so ein abgesetzter Dienst aber trotzdem irgendwie Teil der Kernel-Schicht, eben aufgrund der Abhängigkeit. Es ist nur eine Frage der Betrachtungsweise.
Zitat
Damit wird a) u.U. Code gedoppelt und vor allem b) die Idee der zentralen Benutzerverwaltung ad absurdum geführt
Das verstehe ich aber nicht so ganz. Vor allem b). Viel zentraler als Dein Kernel Layer kann es doch gar nicht mehr werden??

Vielleicht wäre es eine Alternative - auch um Code Dup zu vermeiden, den Teil der Auth-Logik, der vom Kernel benötigt wird, auch dort zu implementieren. Dann hast Du zusätzlich ein Modul, das erweiterte Logik für die Applikationen bereitstellt, und für die bereits im Kernel implementiertwe Logik als Proxy fungiert.

Und wenn ich mir das jetzt selbst durchlese, ist man damit wieder in gewisser Weise beim oben genannten Fall 2 eines abgesetzten Dienstes/Moduls, von dem der Kernel dann eben abhängt.

Also sozusagen eine Zwischenschicht zwischen Kernel und Modulen, von dem der Kernel abhängt. Die Anwendungen greifen dann aber nicht direkt darauf zu, sondern über ein Modul in der Modulschicht, das für bereits implementierte Logik als Proxy fungiert.

Ich hoffe ich habe Dich jetzt nicht komplett falsch verstanden. Aber vielleicht ist das mal ein Anfang für:
Zitat
und freue mich auch über eifrige Diskussionen

Gruß, MarsStein

Thema: [Gelöst] scintilla-Form mit Backgroundworker füllen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

warum ist FH_WorkerFinished denn static? Das sollte eine Instanzmethode der Form sein, dann kannst Du auch zugreifen :)

So in der Art:

void FH_WorkerFinished(object sender, EventArgs e)
{
    Console.WriteLine("Event ausgelöst!");
    var fileHandler = (FileHandler)sender;
    myTextField.Text = fileHandler.ConvertedText;
}

Gruß, MarsStein

Thema: [Gelöst] scintilla-Form mit Backgroundworker füllen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

dem BackgroundWorker musst Du bestimmt keine GUI bekannt geben.
Die brauchst Du ja auch nur in dem RunWorkerCompleted-Handler, und der Handler gehört nicht zum BackgroundWorker, sondern zu einer Deiner eigenen Klassen.
Du hast also 2 Möglichkeiten:
Entweder gibst Du gibst der FileHandler-Klasse die Form (oder die zu aktualisierenden Controls) mit - das ist die unschöne Variante.
Oder Du verpasst Deiner FileHandler-Klasse ein eigenes Event, das Du von der Form aus abonnieren kannst - das ist die saubere Variante. Dieses Event feuerst Du dann im RunWorkerCompleted-Handler. In einer entsprechenden EventArgs-Klasse gibst Du alle Informationen mit, die die Form kennen muss, um die GUI zu aktualisieren: [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)

Die Invoke-Geschichten kannst Du Dir beim BackgroundWorker normalerweise sparen, weil sie in dem Thread laufen, in dem RunWorkerAsync aufgerufen wird. Wenn Dein FileHandler nicht schon einen eigenen Thread hat, ist das der GUI-Thread, und Du kannst auf die Controls ohne Invoke zugreifen.

Gruß, MarsStein

EDIT sagt noch: Wenn Du das eigene Event angehst, und die Informationen für die GUI in der FileHandler-Klasse als public Properties vorliegen, kann es auch reichen, in der Form im EventHandler, den sender auf FileHandler zurückzucasten und dann auf diese Properties zuzugreifen. Dann sparst Du Dir eine eigene EventArgs-Klasse. Geschmackssache.

Thema: [Solved] Wie kann ich mit VB.NET einen Screenshot erstellen und ausdrucken?
Am im Forum: GUI: WPF und XAML

Hallo,

wie kommst Du auf die Angabe 400 für die Resolution?

Image.SetResolution(400, 400)

Du machst ja einen Screenshot. Die meisten Bildschirme haben eher eine Auflösung von 96 dpi, das solltest Du dann auch für das Bild verwenden, sonst wird es viel zu klein gedruckt.

hth

Gruß, MarsStein

Thema: Statische Methode in einer anderen Klasse aufrufen
Am im Forum: Grundlagen von C#

Hallo,

Du musst die Methode als public deklarieren.
Das sind absolute Grundlagen. Deshalb empfehle ich dringend [FAQ] Wie finde ich den Einstieg in C#?

Gruß, MarsStein

Thema: Wie kann ich nach TCP/IP Verbindungsaufbau auch Daten übertragen?
Am im Forum: Netzwerktechnologien

Hallo,

es ist eigentlich ganz einfach:

Wenn man direkt mit Socket arbeitet, verwendet man socket.Send(...)
Wenn man mit TcpClient arbeitet, besort man sich mit client.GetStream() den zugehörigen NetworkStream und verwendet dann stream.Write(...)

Gruß, MarsStein

Thema: Menü links darstellen, nach Buttonklick soll rechts der Content erscheinen
Am im Forum: GUI: Windows-Forms

Hallo,

da Du mit Windows Forms unterwegs bist, empfehle ich die Lektüre von [FAQ] Assistenten/Wizards: Mit Windows Forms eine Art Frameset einer Website nachbauen (auch wenn Du keinen Wizard bauen willst, findest Du da hilfreiche Tipps - musst das ganze halt etwas für Deinen Gebrauch anpassen).

Benutzersteuerelemente sind grundsätzlich dafür völlig OK und brauchbar, und werden auch in dem verlinkten FAQ-Artikel erwähnt (als UserControls).

Gruß, MarsStein