Gå til innhold

C#: Helt fersk i C#, trenger hjelp og forklaring på feil


Anbefalte innlegg

Videoannonse
Annonse
Gjest Slettet+9871234
Skrevet

morgan_freeman.jpg

"What seems to be the problem here son?"

Gjest Slettet+9871234
Skrevet (endret)

Ser ut som om .Show() krever en instanisert klasse for å kunne kalles. Metoden er ikke statisk og krever derfor en referanse/tilhørighet til et instansiert objekt.

 

Form2 form = new Form2();

form.Show(); // noe i den duren?

 

Du kan prøve Form2.Control.Show();

 

Jeg har ikke Visual Studio for hånden og får ikke testet. Har heller ikke jobbet mye med forms.

 

---

 

Litt på siden. Er det ikke mer logisk å ha kun en Form for hele applikasjonen, og flere popupbokser? Kommer vel an på type appliksjon I guess, men jeg tenker på ditt eksempel.

Endret av Slettet+9871234
Skrevet (endret)

Hva med dette? Virker mer som standard syntaks for en if enn den du har.... Nå skal det sies at jeg kun har erfaring fra C/C++ og PHP/JS, men allikevel er det vel verdt et forsøk?

 
if (i < 10){
 Form2.show(); 
}

 

Greit nok at det vanligvis skal holde uten {} når man kun har én linje, men det kan jo være en fordel å sikre seg at det ikke er der feilen ligger :)

Endret av Araho
Gjest Slettet+9871234
Skrevet (endret)

Hvis du skriver new Form2(), har du da opprettet en instans av en statisk klasse? (Som ikke skal være mulig?)

Jeg forstod ikke den syntaksen helt. C# har mange snarveier hehe.

Endret av Slettet+9871234
Skrevet

Nei. Form2 er en klasse, mens Show er ikke en statisk funksjon. Det kreves derfor en instans av Form2 for å kunne kalle show. (new Form2()).Show() lager en ny form som en dangling reference og kaller show på den instansen.

Gjest Slettet+9871234
Skrevet

"Dangling reference" er ukjent for meg. Det må jeg slå opp. Men hvordan kan du adressere eller referere en slik instanse når den ikke har navn? Er dette kun en syntaks man kan bruke i et slikt tilfelle, hvor man ikke behøver å referere et bestemt objekt?

Gjest Slettet+9871234
Skrevet (endret)

Når du bruker new operatoren foran klassenavnet, betyr det at du instansierer et objekt av type Form2. Det er påkrevd fordi metoden Show() ikke er statisk, og den trenger derfor en objekttilhørighet.

 

http://www.csharp-station.com/tutorial.aspx

Les leksjon 5.

Endret av Slettet+9871234
Skrevet

Det at den ikke blir lagret i en variabel ville gjort det til en dangling reference, men Windows Forms holder styr på alle kontrollene. Normalt ville et slikt kall gjort at referansen hadde gått rett til GC. Derfor en "dangling reference"

Gjest Slettet+9871234
Skrevet

Så det kan være at .net rammeverket eller forms bibliotekene faktisk tilordner instansen til en variabel som er skjult? (Skal ikke mase mer nå, men det var litt interessant).

Skrevet

Når du skriver det slik:

(new Form2()).Show;

så lager den instansen og starter formen for deg men du vil ikke kunne få hentet ut noen informasjon fra formen. Hadde du derimot skrivd:

Form2 form = new Form2(); 
form.Show();

så ville du kunne hentet ut informasjon fra formen i etterkant om ønskelig.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...