Gå til innhold

C#: Kor i koden skal eg plassere Main()?


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av Arne
Lenke til kommentar

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

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 av Arne
Lenke til kommentar

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
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

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

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

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
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 :p

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

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å
×
×
  • Opprett ny...