none
Generelle Probleme mit "this" und Frage zum Owner RRS feed

  • Frage

  • Hallo. Ich brauche mal Hilfe.

    Ich habe einfach Probleme zu erkennen wann ich "this" brauche. Es gibt einfach zuviele Dinge die auch ohne das wörtchen "this" funktionieren... Das verwirrt mich ziemlich, und ich wieß nie ob ich es nun utzen soll oder nicht :(. Der einizge wirkliche sinn von this, den ich sehe ist der, dass es den aufrufenden mitgibt ( also den Owner setzt).

    Hier habe ich jedoch auch ein Problem. Eine klasse die aufpoppt ( also eine neue Form öffnet) rufe ich ja folgendermaßen auf:

    Form2 Form2object = new Form2();

    Form2.Show(this)

    Wie gebe ich nun den Owner mit, wenn ich nur eine Methode der Klasse aufrufen will?

    Also z.B Form2.CheckAbility(this) gäbe ja keinen Sinn, weil This dann ja als Parameter gewertet wird.

    Vielen Dank im Vorraus

    Dienstag, 20. November 2012 14:58

Antworten

  • Hallo, this repräsentiert die Instanz der Klasse, wo this vernwedet wird. Beispielsweise wird bei this.Width die Breite einer Form bestimmt, solange die Eigenschaft in einer Methode der Form verwendet wird.

    Wenn du eine 2. Form anzeigen willst, so kannst du Owner zuweisen sodass du nicht jedesmal this beim anzeigen übergeben musst. Die angabe einer Parent sagt nur, das deine MainForm das Mutterfenster deiner Childform ist. Wenn du es nicht übergibst und nicht in der Taskleiste anzeigst, findet man das Fenster sonst manchmal auf dem Desktop liegend oder ähnliches.

    Bei dem Aufrufen einer Metode deiner 2. Form musst du this nicht beachten. this ist nur für die Übergabe des Mutterfensters da. Wenn du beispielsweise die Breite der Form wie folgt änderst:

    frm2.Width=300;

    Dann wird die Breite auf deine ChildForm angewendet und nicht auf MainForm wie hier:

    Width=300;
    //oder
    this.Width=300;

    MSDN Artikel:

    this

    Form.Owner


    Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/

    • Als Antwort markiert Kargohose Dienstag, 20. November 2012 15:27
    Dienstag, 20. November 2012 15:10
    Moderator

Alle Antworten

  • Hallo, this repräsentiert die Instanz der Klasse, wo this vernwedet wird. Beispielsweise wird bei this.Width die Breite einer Form bestimmt, solange die Eigenschaft in einer Methode der Form verwendet wird.

    Wenn du eine 2. Form anzeigen willst, so kannst du Owner zuweisen sodass du nicht jedesmal this beim anzeigen übergeben musst. Die angabe einer Parent sagt nur, das deine MainForm das Mutterfenster deiner Childform ist. Wenn du es nicht übergibst und nicht in der Taskleiste anzeigst, findet man das Fenster sonst manchmal auf dem Desktop liegend oder ähnliches.

    Bei dem Aufrufen einer Metode deiner 2. Form musst du this nicht beachten. this ist nur für die Übergabe des Mutterfensters da. Wenn du beispielsweise die Breite der Form wie folgt änderst:

    frm2.Width=300;

    Dann wird die Breite auf deine ChildForm angewendet und nicht auf MainForm wie hier:

    Width=300;
    //oder
    this.Width=300;

    MSDN Artikel:

    this

    Form.Owner


    Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/

    • Als Antwort markiert Kargohose Dienstag, 20. November 2012 15:27
    Dienstag, 20. November 2012 15:10
    Moderator
  • Die Antwort besteht aus zwei Teilen:

    1. Du musst es überall benutzen, wo eine Referenz auf das aktuelle Objekt benötigt wird.
    2. Du kannst es überall benutzen, wo du ein Feld, Eigenenschaft oder Methode des aktuellen Objekt nutzt, wenn dies innerhalb selbigen statt findet.

    Z.B.

    public class TestThis 
    {
      private int field = 0;
    
      public void OptionalThis()
      {
        this.field = 10; // Optional.
      }
    
      public TestThis(int field)
      {
        this.field = field; // Macht auch klar um was es geht.
      }
    
      public TestMandatoryThis()
      {
        ConsumeTestThis consumer = new ConsumeTestThis();
        consumer.Consume(this);
      }
    }
    
    public class ConsumeTestThis
    {
      public void Consume(TestThis testThis)
      {
      }
    }

    Ich bevorzuge die explizite Benutzung von this. Siehe hierzu auch StyleCop. Installieren und testen.


    Dienstag, 20. November 2012 15:17
  • Vielen Dank. Eure beiden Beiträge haben das hundertmal besser erklärt als die Msdn-Artikel.
    Dienstag, 20. November 2012 15:27