Avatar billede huusom Nybegynder
20. oktober 2003 - 13:21 Der er 27 kommentarer og
2 løsninger

What in the world is THIS?

Er der nogen der kan forklare mig hvad THIS bruges til?
Jeg har læst lidt om det men kan ikke gennemskue hvordan den virker.

Så hvis nogen gider at forklare mig så jeg forstår det.
Pointene går til den der får mig til at forstå.
Avatar billede finger Nybegynder
20. oktober 2003 - 13:22 #1
this er en reference til den "kørende" instans af din form.
Avatar billede finger Nybegynder
20. oktober 2003 - 13:23 #2
med this kan du med intellisense nemt finde frem til dine metoder eller variable på din form.
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 13:23 #3
Mere generelt: this er en reference til den nuværende instans af class af en eller anden type.
Avatar billede tomdane Nybegynder
20. oktober 2003 - 13:24 #4
c# betyder "C sharp" og er Microsoft's udbygning af C++, som er et programmeringssprog.

Sharp er et udtryk fra musikverdenen (dur, mol, fis etc.)

I øvrigt skal du nok putte en hel del flere detaljer på dine spørgsmål, hvis du vil have brugbare svar.

TD
Avatar billede huusom Nybegynder
20. oktober 2003 - 13:31 #5
Det jeg ønsker er bare en forståelse af hvad THIS gør,
ikke perfide svar, men tak for det tomdane.

Er der nogen der kan give mig et eksempel hvor det er virkelig uddybet?
Ikke hvad C# er men hvad THIS gør.
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 13:35 #6
"this" svarer til Visual Basics "Me" og Delphis "self".

Det er en egenreference til klasse-instancen selv. Den er ikke nødvendig at få med, men som finger siger, giver den mulighed for intellisense til egne properties og metoder.
Avatar billede finger Nybegynder
20. oktober 2003 - 13:37 #7
er det forståeligt nok?
Avatar billede huusom Nybegynder
20. oktober 2003 - 13:42 #8
Et eksempel kunne være dejligt.
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 13:45 #9
Opret en klasse og giv den nogle private variable.

I constructoren skriver du nu this.

Derefter vil du kunne se dine private variable

Jeg er ikke sikker på, at der kan gives bedre eksempel.

Det svarer sprogligt til at give et eksempel på hvad "jeg" er.
Avatar billede omen Nybegynder
20. oktober 2003 - 13:54 #10
Ahh!
Hvis du nu skal kalde en funktion, og den funktion er i din class, kan du kalde det ved this.fuctionGetTime(); (f.eks)

Hvis du nu har en Form1, som du skal sætte højden på, istedet for at skrive Form1.Height = 2000; kan du bruge this.Height = 2000;,
det samme hvis du skal lukke en form kan du bruge
this.Dispose();

Altså this er som det betyder, denne! Det er en genvej til den class du arbejder med!
Er, jeg forklarer ikke så godt så håber disse eksempler kan hjælpe lidt!
Avatar billede omen Nybegynder
20. oktober 2003 - 13:58 #11
The this keyword refers to the current instance of the class. Static member functions do not have a this pointer. The this keyword can be used to access members from within constructors, instance methods, and instance accessors.

The following are common uses of this:

To qualify members hidden by similar names, for example:

public Employee(string name, string alias)
{
  this.name = name;
  this.alias = alias;
}

Taget fra MSFN Library!
Avatar billede huusom Nybegynder
20. oktober 2003 - 14:00 #12
Jeg vil nok først forstå det når jeg sidder med det en dag og skal bruge... ikke før.

Jeg skal se det stillet op i et eksempel hvor det er nødvendigt at bruge THIS.
Avatar billede huusom Nybegynder
20. oktober 2003 - 14:02 #13
Tak... men this.name = name; hvad svarer den til hvis du laver det om?
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 14:04 #14
Det er kun nødvendigt i det tilfælde, hvor du har variable i klassen, som hedder det samme som parametre på en metode.

public class Employee
{
  string name;
  string alias;

  public Emplyeee(string name, string alias)
  {
    this.name = name;
    this.alias = alias;
  }

}



I ovenstående har du ikke anden mulighed for at skille klassens variable fra parametrene end at bruge klassens egenreference, som er this.

At jeg så aldrig ville navngive klassevariable med samme navn som parametre, er så en anden sag. Jeg ville navngive klassevariablene _name og _alias.
Avatar billede finger Nybegynder
20. oktober 2003 - 14:04 #15
det er aldrig _NØDVENDIGT_ at bruge det.
Du kan bruge det som en dejlig lille hjælp med intellisense til at få en liste over dine metoder og variable i den klasse.
Om man vil bruge det eller ej, er en smagssag. Men det er en dejligt feature.
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 14:05 #16
finger >> AFAIR er det NØDVENDIGT i det tilfælde, jeg har skitseret.

Men at det så er dårlig navngivning, er en anden sag.
Avatar billede finger Nybegynder
20. oktober 2003 - 14:07 #17
man kan jo også angive det med klasse navn istedet for at bruge this....
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 14:08 #18
Ikke i constructoren
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 14:09 #19
Der er tyrklejf i mit eksempel. Det skulle have været

public Employee(string name, string alias)
Avatar billede finger Nybegynder
20. oktober 2003 - 14:11 #20
det er egentligt rigtigt nok. godt set.
Avatar billede bennytordrup Nybegynder
20. oktober 2003 - 14:13 #21
Men som sagt. Det kan løses ved ordentlig navngivning.
Avatar billede finger Nybegynder
20. oktober 2003 - 14:15 #22
jeps. godt vi har kodestandarder ;-p
Avatar billede huusom Nybegynder
20. oktober 2003 - 14:19 #23
Hmmmm....
Jeg lærer det vel nok på et tidspunkt jeg er jo også forholdsvis ny til programmering.

Det er ligesom Arrays... jeg kunne heller ikke se hvad man skulle bruge Arrays til i starten.
Nu bruger jeg det i stor stil.

Det kommer nok en dag med This...
Avatar billede huusom Nybegynder
20. oktober 2003 - 14:20 #24
Finger får 5
Benny.tordrup får 10.
Det er sådan jeg kan se det skal fordeles.
Avatar billede finger Nybegynder
20. oktober 2003 - 14:21 #25
jeg kan forestille mig at hvis du ikke bruger Visual Studio (der understytter intellisense), så kan det virke formålsløst (med mindre man skal bruge de i en constructor;-))
Avatar billede finger Nybegynder
20. oktober 2003 - 14:21 #26
fint fint
Avatar billede omen Nybegynder
20. oktober 2003 - 18:05 #27
Hvis du skal sætte Opacity på din form i runtime, så ER det nødvendigt at bruge this.Opacity = 0.5;
Avatar billede omen Nybegynder
20. oktober 2003 - 18:08 #28
Eller, så slipper du for at declare din form, så ikke HELT nødvendigt... :-)
Avatar billede arne_v Ekspert
20. oktober 2003 - 21:22 #29
Der er mange tilfælde hvor man skal bruge this:

1)  den allerede nævnte hvor argumenter skygger for instans medlemmer

2)  når et objekt skal sende en referance til sig selv som argument

3)  når en constructor vil kalde en anden constuctor i samme klasse

4)  ved indexers

Se følgende fjollede eksempel:

using System;

class B
{
    private A a;
    public B(A a)
    {
        this.a = a; // argument shadows for instance member
    }
    public void foobar()
    {
        Console.WriteLine(a.V);
        Console.WriteLine(a[77]);
    }
}

class A
{
    private int v;
    private B b;
    public A(int v)
    {
        this.v = v; // argument shadows for instance member
        b = new B(this); // pass itself as argument
    }
    public A() : this(0) // use another constructor
    {
    }
    public int V
    {
        get
        {
            return v;
        }
    }
    public int this[int ix] // indexer
    {
        get
        {
            return v;
        }
    }
    public void foobar()
    {
        b.foobar();
    }
}

class MainClass
{
    public static void Main(string[] args)
    {
        A a1 = new A(123);
        a1.foobar();
        A a2 = new A();
        a2.foobar();
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester