Net Framework-Klasse SendKeys nicht instanzierbar



  • Hallo Zusammen,

    ich frage mich wie die das von Microsoft gemacht haben- warum ist SendKeys nicht instanzierbar und warum muss ich die meisten Framework-Objekte über Zeiger erstellen ? Wieso kann ich keine Instanzen wie folgt anlegen :

    SendKeys sndKeys;
    

    Beinhaltet SendKeys etwa auf NULL gesetzte virtuelle Memberfunktionen oder warum ist das so ? *TotalNeugierigBinWarumDasSoIst"

    Grüß'le
    Xzibit



  • Diese Klassen haben einfach eine Konstruktor der "private" ist. Somit kann diese Klassen niemand instanziieren.
    Was sie bei dieser Klasse vergessen haben: Sie sollte eigentlich auch noch als "sealed" markiert werden; damit lässt sie sich dann auch nicht ableiten!
    SendKeys lässt sich aber ableiten und somit kannst Du sie auch in der abgeleiteten Klasse instanziieren.



  • Aha. Das wusste ich noch nicht. Darf ich nochmals zusammenfassen ?
    Eine Klasse benötigt nicht zwingend einen Konstruktor. Wenn dieser aber als private deklariert ist, dann versucht der Compiler trotzdem auf den eigenen Konstruktor der Klasse zuzugreifen, was aber natürlich nicht geht. Das liefert eine Fehlermeldung und der Compiler kann somit die Klasse nicht instanzieren. Ist meine Folgerung richtig ?
    Sry dass ich nochmals nachfrag - aber ich möchts gern genau wissen 😉
    Und was ich noch gerne wissen wollte: ich meine, wenn ich einen Zeiger auf die Klasse erstelle, warum geht dann das ? Es wird kein Konstruktor aufgerufen klar, aber wie kann ich dann Funktionen der Klasse aufrufen, obwohl die Klasse nicht instanziert ist ? Geht das immer...braucht man nur für Variablen eine Instanz (also Speicherplatz) oder sehe ich das falsch ?

    Vielen Dank schon mal und nen schönen Gruß dalass
    Christoph



  • Xzibit schrieb:

    Eine Klasse benötigt nicht zwingend einen Konstruktor.

    Nein, eine Klasse benötigt immer einen Konstruktor. Wenn Du Ihnn nicht explizit angibst erzeugt ihn der Compiler.

    Xzibit schrieb:

    Wenn dieser aber als private deklariert ist, dann versucht der Compiler trotzdem auf den eigenen Konstruktor der Klasse zuzugreifen, was aber natürlich nicht geht. Das liefert eine Fehlermeldung und der Compiler kann somit die Klasse nicht instanzieren. Ist meine Folgerung richtig ?

    Genau.

    Xzibit schrieb:

    Und was ich noch gerne wissen wollte: ich meine, wenn ich einen Zeiger auf die Klasse erstelle, warum geht dann das?

    Du meinst wohl

    SendKeys *pSendKeys;
    

    oder?

    Xzibit schrieb:

    Es wird kein Konstruktor aufgerufen klar, aber wie kann ich dann Funktionen der Klasse aufrufen, obwohl die Klasse nicht instanziert ist?

    Ja, vermutlich gar nicht? Oder wie willst Du was aufrufen, was nicht da ist?

    Xzibit schrieb:

    Geht das immer...braucht man nur für Variablen eine Instanz (also Speicherplatz) oder sehe ich das falsch?

    Eine Klasse braucht auch Speicherplatz...



  • Ja, vermutlich gar nicht? Oder wie willst Du was aufrufen, was nicht da ist?

    Aber warum kann ich dann die Send/bzw. die SendWait-Methode der Klasse SendKeys aufrufen, obwohl ich überhaupt keine Instanz der Klasse habe, sondern nur einen Zeiger auf die Klasse ? (des funktioniert, hab ich ausprobiert)
    Greift mein lokaler Funktionszeiger dann irgendwo in den Speicher und überschreibt andere Daten ?
    Und selbst wenn ich keine Instanz der Klasse erzeugen kann, was nützt mir die dann überhaupt ? War das so vorhergesehen, dass man erst eine eigene Klasse von dieser ableiten muss oder muss man über einen nicht instanzierten Zeiger darauf zugreifen ? Wie machst du denn das z.B. ? Sry aber ich hab keinen Plan wie man dann die Klasse benutzen kann...für was is die dann gut, wenn ich keine Instanz erzeugen kann ?

    Schönen Gruß
    Christoph



  • Zeig doch mal bitte ein bischen Code, wo das geht...



  • Das sind einfach statische Funktionen, wo ist das Problem? Man muss halt kein Objekt erstellen, sondern ruft die Funktionen direkt über Klassenname + Funktionsname auf.



  • Aja, klingt einleuchtend Talla. Hab ich mir auch schon gedacht, dass die warscheinlich statisch sind. Aber wieso kann ich die dann über einen Zeiger aufrufen ?

    @Jochen
    Also mein Code sieht so aus:

    SendKeys *sndKeys;
    sndKeys->Send ("Hallo");
    

    MFG
    Christoph


Anmelden zum Antworten