"We are back" « oc.at

[C#] This-Operator?

Hansmaulwurf 13.03.2008 - 16:02 14513 16
Posts

Hansmaulwurf

u wot m8?
Avatar
Registered: Apr 2005
Location: VBG
Posts: 5639
Hi.
Ich steh gerade komplett an bei einer Erläuterung des "this" Operators.
Das einzige was ich weiß "Das this-Schlüsselwort verweist auf die aktuelle Instanz der Klasse" :confused:
Ich soll ein kurzes Fragment schreiben, wo der this Operator für eine Methode wirklich notwendig ist, und hab aber keinen Plan..
Google liefert alles nur nicht das was ich will.
(Term "this" gefällt ihm wohl nicht so :p)

Obermotz

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
Wenn mehrere Methoden/Variablen gleichen Namens existieren - this-> und die Sache ist eindeutig.

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1482
Code:
public class Person
{
	private string _vorname;
	public string Vorname
	{
		get { return _vorname; }
		set { _vorname = value; }
	}

	public Person(string Vorname)
	{
		this.Vorname = Vorname;
	}
}

ohne this, würdest du den Parameter sich selbst zuweisen.

Hansmaulwurf

u wot m8?
Avatar
Registered: Apr 2005
Location: VBG
Posts: 5639
Ok, langsam wirds glaub ich..

Aber @ AoD's Beispiel. Welcher ist dann der this.Vorname, bzw welcher Vornahme wird draufgeschrieben?

Ich steh nur gerade ein bissi am Schlauch, da ich schon seit 3 Stunden sitz, und das schon länger nicht mehr angerührt hab, und da denkt mein Hirn dann zu kompliziert :D

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1482
this.Vorname = Property Zeile 4-8
Vorname = Parameter des Konstruktors Zeile 10

this.Vorname = Vorname
kann man lesen
Property der Instanz = Parameter des Kontruktors

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14695
also so wie du das erklärst solltest besser nie lehrer werden ;)

mit Vorname ist, wie gesagt, ein property in der Klasse. wenn du jetzt this.Vorname aufrufst, wird Vorname der eigenen Klasse ausgeführt. und ned von irgend ner andern. oder gar von dem Vorname, was da via parameter daher kommt.

this verweist sozusagen IMMER auf "zeug aus meiner eigenen klasse"... und ned auf variablen, die irgendwie als parameter daher kommen.

allerdings rechtfertigt das eh scho wieder nen flame: Variablennamen mit nem groß buchstaben beginenn zu lassn ist ein guter grund für 50 peitschenhiebe auf den nackten hintern.

Symon

Addicted
Avatar
Registered: Jul 2001
Location: Vienna
Posts: 483
Zitat von semteX
allerdings rechtfertigt das eh scho wieder nen flame: Variablennamen mit nem groß buchstaben beginenn zu lassn ist ein guter grund für 50 peitschenhiebe auf den nackten hintern.
also imho is das durchaus so üblich in c# um die getter/setter zu kennzeichnen und die private var dazu mit _* zu benennen.

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3297
üblich (leider) ja (danke an die vb-coder da draussen), empfohlen/sinnvoll/schön nein. siehe auch http://msdn2.microsoft.com/en-us/library/ms229045.aspx
Bearbeitet von DKCH am 13.03.2008, 19:09 (link fixed)

Hansmaulwurf

u wot m8?
Avatar
Registered: Apr 2005
Location: VBG
Posts: 5639
Ok, danke an alle.
Das war nur eben so extrem blöd wegen Google inkombilität, und die Microsoft Hilfe ist auch nicht so das gelbe vom Ei :D

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12130
pah, getter/setter-Methoden sind generell urgh!. Ruby macht vor, wie es schoen ist :)

Zitat
Unlike the "getter" and "setter" methods of other languages like C++ or Java, accessor methods in Ruby can be written with a single line of code.
Quelle: Wikipedia

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3297
Zitat von COLOSSUS
pah, getter/setter-Methoden sind generell urgh!. Ruby macht vor, wie es schoen ist :)


Quelle: Wikipedia

und, was hilfts jemand der c# verwendet? ;) themenverfehlung, fünf, setzen

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14695
Zitat von Symon
also imho is das durchaus so üblich in c# um die getter/setter zu kennzeichnen und die private var dazu mit _* zu benennen.
getter + setter (in c# ja kurz: propertys): JA

variablen, die als argumente übergeben werden (String Vorname): no fcking way.

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3297
Zitat von COLOSSUS
pah, getter/setter-Methoden sind generell urgh!. Ruby macht vor, wie es schoen ist :)


Quelle: Wikipedia

aja, was ich vergessen hab: ganz lernresistent is ja nicht mal ms, in c# 3.0 gibts public string Vorname { get; set; }. wird schon, mitm ruby-style ;)

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12130
Zitat von DKCH
und, was hilfts jemand der c# verwendet? ;) themenverfehlung, fünf, setzen

Dann setz' dich gleich neben mich, Mr.-Visual-Basic-Cross-Referencer.

(Manchmal ist es aber auch gar nicht schaedlich, ueber den tellerrand zu schauen :eek: )

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1482
Zitat von semteX
allerdings rechtfertigt das eh scho wieder nen flame: Variablennamen mit nem groß buchstaben beginenn zu lassn ist ein guter grund für 50 peitschenhiebe auf den nackten hintern.
Es war ja nur als ein Beispiel für die Notwendigkeit des this Operators gedacht, da mir nichts anderes eingefallen ist. In meinem normalen Code haben Parameter natürlich einen Kleinbuchstaben am Anfang ;)
Zitat von DKCH
aja, was ich vergessen hab: ganz lernresistent is ja nicht mal ms, in c# 3.0 gibts public string Vorname { get; set; }. wird schon, mitm ruby-style ;)
Ergänzung: Die heißen dann "Automatic Properties"
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz