Static och This

Inledning

I denna artikel tar vi en snabbt titt på betydelsen av de reserverade orden static och this.

Innebörden av static

Nu när vi har kommit såhär långt så kan vi börja diskutera innebörden av det reserverade ordet static igen. Som ni säkert märkt så står detta i deklaration av medlemsvariabler och medlemsfunktioner. Den kanske mest kända vid det här laget är static void Main(string[] args) när ni gör Console Applications.

Kort kan man säga att statiska medlemmar (attribut och metoder) kan användas utan att först skapa ett objekt. Man kan också se det som att klassen delar på alla statiska resurser sinsemellan. Så statiska medlemmar är gemensamma för alla objekt av samma klass. Se exempel:


class myClass
{
	public static int i;

	public static void DoSomething()
	{
		Console.WriteLine("I did something..");
	}
}

..

static void Main(string[] args)
{
	myClass.i = 10;
	myClass.DoSomething();
}

Observera att vi måste använda klassens namn när vi vill komma åt de statiska medlemmarna. Funktionen DoSometing() och variabeln i går alltså att använda trots att vi inte skapat något objekt av klassen myClass. Känns detta bekant? Vi kan jämföra med t ex Console.ReadLine() och Console.WriteLine() som båda är statiska metoder i klassen Console.

This

Betrakta följande exempel:


class Person
{
	private DateTime födelsedag;
	private string namn;
	private string telefon;

	public Person(DateTime födelsedag, string namn, string telefon)
	{
		this.födelsedag = födelsedag;
		this.namn = namn;
		this.telefon = telefon;
	}
}

Ovanstående klass har samma variabelnamn på sina medlemsvariabler som konstruktorn för klassen har på sina inparametrar. Går detta verkligen?

Svaret är ja! Vi behöver dock någon logik för att skilja dem åt.

Som du borde veta vid det här laget så kan parametrarna i metoder jämställas vid lokala variabler inom metoden. Genom att använda samma namn på lokala variabler/inparametrar i medlemsmetoden så "döljer" man medlemsvariabler inom klassen som råkar heta samma. Lösningen är att använda nyckelordet this som alltid refererar till objektet självt och vi kommer då åt medlemsvariablerna utan namnkonflikter med de lokala variablerna.

Ett tips är att använda ordet this i så stor utsträckning som möjligt för att göra koden mer lättläst. Det syns då genast när en medlemsvariabel används och när en lokal variabel används.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Scroll to top