Prøver at forstå class

Tags:    vb.net

Hej udviklere.

Jeg kunne godt tænke mig at lave en class. Så hvorfor ikke begynde på en? Jeg er startet med det letteste emne: den skal kunne regne.
Jeg har altså oprette en class, som jeg har kaldt Udregning. I min class har jeg skrevet følgende:

Fold kodeboks ind/udKode 


I min Form1 har jeg skrevet:

Dim Regn As New Udregning

I Button1.Click har jeg skrevet:

Fold kodeboks ind/udKode 


Jeg vil altså have den til at plusse Label1 med 1, men det virker ikke. Her er spørgsmålet så: har jeg gjort noget forkert eller mangler jeg noget?

Jeg arbejder i VB.NET

Håber på hjælp. :)



Hej Claus.

Jeg vil ikke forsøge at forklare klasser og objekt-orienteret design/programmering for dig, for det er en videnskab i sig selv :-) Jeg vil nøjes med at forklare, hvorfor din kode ikke virker.

For det første bør du sætte de to compiler options "Option Strict" og "Option Explicit" (http://msdn2.microsoft.com/en-US/library/c553zwz0(VS.80).aspx). Dette vil forhindre kode som følgende:

Fold kodeboks ind/udKode 


Me.Label1.Text er en string, men din sub Regn.Plus tager to integers som parametre. Det betyder, at VB implicit laver en "typecast" af værdien i Me.Label1.Text til en integer. Ved at bruge "Option Strict" tvinger VB-kompileren dig til explicit at foretage denne cast, hvilket giver pænere kode:

Fold kodeboks ind/udKode 


Bemærk, at koden vil kaste en FormatException, hvis der ikke er indtastet et lovligt heltal i textbox'en.

Din implementation af Regn.Plus virker ikke, fordi parameteren tal overføres som byval og ikke som byref. Du kan læse mere om byval/byref her: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcn7/html/vaconargpassmechanism.asp

Jeg vil dog mene, at den "korrekte" implementation af Regn.Plus bør være som en funktion, der returnerer summen af de to tal:
Fold kodeboks ind/udKode 


Håber, du er blevet lidt klogere.

:-) Jakob.



Indlæg senest redigeret d. 20.12.2006 16:28 af Bruger #11036
Hej Jacob.

Så fik jeg det til at virke.
Du skal have mange tak for hjælpen. :)



t