Arne Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Hei! Eg berre kikkar litt på språket, og eg lurar på ein ting. Kor skal eg plassera Main()? Ta denne koden, til dømes: using System; class Person { int age; string name; string profession; bool married; public Person() { age = 0; name = "Unknown"; profession = "Unknown"; married = false; } public Person(int a, string n, string p, bool m) { age = a; name = n; profession = p; married = m; } } Skal main inni person-klassen etter konstruktør nr. 2? Viss eg har mange klasser som kvar tek for seg eit "emne" innan eit stort prosjekt, vil det ikkje då vere litt rotete å ha Main() inni ein hvilkensomhelst klasse? Eg ser at det ikkje går an å ha noko utanfor ein klasse. Løyser ein då dette med å opprette ein main-klasse? I små program som dette, så går det jo fint å ha det inni den fyrste og beste klassen, men det er kanskje ikkje så greit i store prosjekt? Eller er det slik at kvar klasse kan ha sin eigen Main()? Lenke til kommentar
GeirGrusom Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Main må være en statisk funksjon i en statisk klasse f.eks. public static class Program { public static int Main() { Application.Run(new System.Windows.Forms.Form()); } } Dette programmet vil bare vise et tomt vindu. Lenke til kommentar
Arne Skrevet 13. mars 2008 Forfatter Del Skrevet 13. mars 2008 Eg forstår. Er det då vanleg å lage ein static klasse som ein kallar for Program som ein puttar Main() i? Så har ein andre klassar til å gjere andre ting? Lenke til kommentar
GeirGrusom Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Japp Det er bare entry point for programmet ditt. Lenke til kommentar
Arne Skrevet 14. mars 2008 Forfatter Del Skrevet 14. mars 2008 Okey, takk skal du ha! Men er det ikkje litt merkeleg at eit språk tvinger utviklaren til å skrive OOP? Eg er litt ny i gamet her, men eg syntest berre det høyrtest litt rart ut. Lenke til kommentar
Mr.Garibaldi Skrevet 14. mars 2008 Del Skrevet 14. mars 2008 Nei, hadde nok heller vært rart om OO baserte språk ikke tvinger utvikleren til å bruke OOP. Java og C# er laget på OO prinsipper, og således er det ikke noe rart at de tvinger programmereren til å følge disse prinsippene. Det er selvsagt mulig å komme seg rundt det (sort of), men ser veldig liten grunn til å gjøre det. Lenke til kommentar
Arne Skrevet 14. mars 2008 Forfatter Del Skrevet 14. mars 2008 (endret) Okey, tusen takk for gode og utfyllande svar! EDIT: Burde ikkje dette fungere? Det kjem ikkje opp noka svart boks, programmet berre starter og avslutter: Program: using System; using System.Windows.Forms; class Program { static void Main() { Person arne; arne = new Person(16, "Arne", "Student", false); arne.PrintData(); Console.ReadLine(); } } Person: class Person { int age; string name; string profession; bool married; public Person() { age = 0; name = "Unknown"; profession = "Unknown"; married = false; } public Person(int a, string n, string p, bool m) { age = a; name = n; profession = p; married = m; } public void PrintData() { Console.WriteLine("Alder: " + this.age); } } Endret 14. mars 2008 av Arne Lenke til kommentar
GeirGrusom Skrevet 14. mars 2008 Del Skrevet 14. mars 2008 Det ser greit ut det. Men vær obs på at programmet kun vil pause før det er ferdig når du debugger det i Visual Studio, hvis du starter .exe filen anuelt vil du ikke se noe som helst (bortsett fra et console vindu som lukker seg med en gang) Lenke til kommentar
Arne Skrevet 14. mars 2008 Forfatter Del Skrevet 14. mars 2008 Rart, for verken når eg debugger i VC# Express eller køyrer fila, så kjem det opp noka konsoll-vindu! Burde ikkje Console.ReadLine() vente på input uansett om det er i utviklingsprogrammet eller om det er i den ferdige versionen? Lenke til kommentar
GeirGrusom Skrevet 15. mars 2008 Del Skrevet 15. mars 2008 Kanskje du ikke har satt dette prosjektet til å være et console program? Sjekk konfigurasjonen til prosjektet. Skal stå til Console og ikke Windows Forms (eller hva det nå en heter i C#) Lenke til kommentar
Arne Skrevet 15. mars 2008 Forfatter Del Skrevet 15. mars 2008 (endret) Ja, det stemmer! Men, går det ikkje an å bruke Console og Windows Forms i samma prosjektet? EDIT: Forresten, skal deklarering av properties inni konstruktøren eller utanom? class Kakemonster { int antKaker; int diameterPrKake; int tjukkelsePrKake; public Kakemonster { antKaker = 10; diamterPrKake = 50; tjukkelsePrKake = 10; } Her ser du dei er utanom, og det virkte for meg, men kva er det som er rettast? Endret 15. mars 2008 av Arne Lenke til kommentar
GeirGrusom Skrevet 15. mars 2008 Del Skrevet 15. mars 2008 Hvis du har et console prosjekt, kan du legge til forms, og hvis du har et forms prosjekt, så kan du legge til console. Lenke til kommentar
Arne Skrevet 18. mars 2008 Forfatter Del Skrevet 18. mars 2008 Okey, takk skal du ha. Men, som vist i min forige post, så lurte eg på noko ang konstruktørar. Skal variabel-deklarasjonane inni konstruktøren eller utanfor i klassen, heilt øverst? Vis gjerne eit døme. Lenke til kommentar
steingrim Skrevet 18. mars 2008 Del Skrevet 18. mars 2008 Skal variabel-deklarasjonane inni konstruktøren eller utanfor i klassen, heilt øverst? Vel.. det betyr jo helt forskjellige ting. Skopet til en variabel deklarert i konstruktøren er innenfor konstruktøren, du kan altså bare bruke variabelen innenfor de to krøllparantesene til konstruktøren. En variabel deklarert "i klassen" kalles gjerne en instansvariabel, eller et felt og er synlig i hele klassen. Dette er basic objekt-orientering Lenke til kommentar
Arne Skrevet 18. mars 2008 Forfatter Del Skrevet 18. mars 2008 Takk skal du ha! Det som fekk meg til å lure, var at eg i Python deklarerte variablar for heile klassen i konstruktøren, og eg lurte på om det var likt i C#, noko det ikkje var. Eg får prøve å bli ferdig med bank-programmet mitt! Lenke til kommentar
steingrim Skrevet 18. mars 2008 Del Skrevet 18. mars 2008 Jepp, i Python er ting annerledes. Strengt tatt deklarerer du ikke variablene i Python, du bare tilordner når du gjør self.foo = 42 -- Python er dynamisk derfor kan du opprette og tilordne slike instans-variable hvor og når som helst Bankprogram? /me jobber i bankvesenet Lenke til kommentar
Arne Skrevet 18. mars 2008 Forfatter Del Skrevet 18. mars 2008 Du kunne jo kanskje maila over kildekoden til bankens sikkerheitssystem ein dag du får tid? Bankprogram, ja! Eg må øve meg i OOP (har vert lite borti det), slik at eg får inn tankegangen. Samtidig vil eg lære meg generell sytax i eit moderne programmeringsspråk, og eg starter med å lage ein modell av ein bank. Tre klasser, "Program", "Bank" og "User". Main() deklarerer to objekt, eit av User(navn, fødselsdato, adresse) og eit av Bank(startkapital). I konstruktøren til Bank blir kontoen tildelt kontonummer. Bank vil innehelde metodar for endring av saldo. Det eineste eg lurar på, er korles main() skal kunne samordne dei to klassane. Sei at eg har 50 objekt av Bank og 50 objekt av User som blir lest inn i minnet når eg startar programmet. Korleis skal eg då gjere programmet så intellegent at det handlar med t.d user1 og bank1 samtidig? Kanskje ein list/dict/vector/array/matrise ville vere på sin plass? Lenke til kommentar
GeirGrusom Skrevet 19. mars 2008 Del Skrevet 19. mars 2008 Jepp, i Python er ting annerledes. Strengt tatt deklarerer du ikke variablene i Python, du bare tilordner når du gjør self.foo = 42 -- Python er dynamisk derfor kan du opprette og tilordne slike instans-variable hvor og når som helst Dette er noe av det jeg hater i Python Kjøtthuer kaller det for en "feature" jeg kaller det "idioti" Grunnen er rett og slett at det åpner for bugs som er utrolig vanskelig å finne ut av. Fordi man kan tilordne en verdi til et objekt selvom det ikke er deklarert. Derfor vil ikke python reagere på dette: en_variabel = "Hei" en_variabl = "Hallo" print en_variabl Vi kun resultere i at to variabler blir generert, selvom man egentlig bare ville ha én. Variabel deklerasjon - nødvendig. Lenke til kommentar
Manfred Skrevet 19. mars 2008 Del Skrevet 19. mars 2008 Kan man ikke force en strict sak på dette? I perl kan man legge til "use strict;" i toppen, og MÅ da deklarere variabler. (Det kan man vel i phh også?) Lenke til kommentar
j000rn Skrevet 19. mars 2008 Del Skrevet 19. mars 2008 Kan man ikke force en strict sak på dette? I perl kan man legge til "use strict;" i toppen, og MÅ da deklarere variabler. (Det kan man vel i phh også?) Tilogmed VBScript har mulighet for OPTION EXPLICIT... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå