2 van 2

Re: Codeproject.com

Geplaatst: zo 12 okt 2008, 13:14
door Bart
Waarom is dat meer netjes? Een private main functie lijkt me eerder not done.


Omdat een main functie doorgaans niet vanuit andere klassen aangeroepen hoort te worden.

Re: Codeproject.com

Geplaatst: zo 12 okt 2008, 13:30
door Cycloon
Omdat een main functie doorgaans niet vanuit andere klassen aangeroepen hoort te worden.


Je OS roept deze toch aan. Het lijkt me dan ook normaal dat de main functie public staat. Een statische methode die private staat is sowieso redelijk onzinnig hoor.

Re: Codeproject.com

Geplaatst: zo 12 okt 2008, 13:47
door Bart
"private" "public" "internal" en "protected" zijn encaptsulations die worden gebruikt door de compiler. De OS/ runtime heeft daar verder helemaal niks mee te maken. "private" betekent namelijk niet dat een variabele of methode buiten de klasse niet toegankelijk is. Tijdens runtime kun jij met bijvoorbeeld reflection alsnog overal bij.

Overigens hebben private static methodes wel degelijk waarde. Een voorbeeld is een public static methode die een sub-functie aanroept die alleen binnen die klasse gebruikt wordt.

Re: Codeproject.com

Geplaatst: zo 12 okt 2008, 14:11
door Cycloon
Overigens hebben private static methodes wel degelijk waarde. Een voorbeeld is een public static methode die een sub-functie aanroept die alleen binnen die klasse gebruikt wordt.
Deze vat ik niet echt.

Maar ik heb ondertussen even zitten zoeken en blijkbaar mag de main methode dus wel private staan in C#. In Java mag het echter niet.

Re: Codeproject.com

Geplaatst: ma 13 okt 2008, 00:13
door Vladimir Lenin
Sorry dat ik het moet zeggen, maar ik heb nu toch al enkele boeken over C# gelezen, en ik kom altijd tegen dat de Main-methode static is.

Volgens mij doet het er eigenlijk niet zoveel toe, iedere programmeur die een programma schrijft, weet waarvoor Main staat, en zal hem dus niet onnodig aanroepen.

Bovendien zou het nog enkele handigheden kunnen hebben, zo kan je in de compiler links zetten naar .dll en .exe files om van andere bibliotheken gebruik te maken, als je dit toepast op een .exe bestand, zou je uit het ene programma het andere kunnen aanroepen, en daarbij ook nog public variabelen in de klassen wijzigen zonder dat je dus de command-line methode dient te gebruiken

Ik zet ook altijd public, overigens had ik nog nooit gehoord dat er mensen waren die hem private maakten.

Ik weet dat java lichtjes afwijkt van C# (maar C# is gebasseerd op Java als je de geschiedenis naleest) sugereerd JCreator trouwens ook dat het public static void moet zijn.

ik lees hier net: http://bytes.com/forum/thread239493.html dat het in Java verplicht is om public te gebruiken maar dat het de C# compiler dus weinig kan schelen wat je er al dan niet voorplaatst, volgens mij slikt het zowel public/private/protected/internal/private internal

ik had trouwens al de indruk dat compilers voor C# een stuk lakser zijn dan die van Java, je hoeft bevoorbeeld ook niet voor elke klasse een nieuw bestand aan te maken. :D

Re: Codeproject.com

Geplaatst: ma 13 okt 2008, 10:04
door Rogier
Als C#-noob even een vraag: is de main functie in C# net als in C/C++ een globale functie? (als in, geen memberfunctie van een class)

En zo ja, wat is het verschil tussen een private of public bij een globale functie?

En wat static vs niet static betreft: bij C/C++ worden static globale functies (evenals static globale variabelen) niet geexporteerd voor de linker, dus kunnen alleen binnen hun eigen .c/.cpp file worden aangesproken. Geldt dat ook voor C#?

Re: Codeproject.com

Geplaatst: ma 13 okt 2008, 18:20
door Cycloon
Rogier schreef:Als C#-noob even een vraag: is de main functie in C# net als in C/C++ een globale functie? (als in, geen memberfunctie van een class)

En zo ja, wat is het verschil tussen een private of public bij een globale functie?
De main functie is zowel in C# als in Java geen globale functie. De main functie moet altijd een methode van een klasse zijn.
En wat static vs niet static betreft: bij C/C++ worden static globale functies (evenals static globale variabelen) niet geexporteerd voor de linker, dus kunnen alleen binnen hun eigen .c/.cpp file worden aangesproken. Geldt dat ook voor C#?
Zolang je klassen importeert (includen in c++) lukt het wel om ze aan te spreken. Ook wanneer ze in dezelfde package zitten (dan is importeren zelf niet nodig).
ik had trouwens al de indruk dat compilers voor C# een stuk lakser zijn dan die van Java, je hoeft bevoorbeeld ook niet voor elke klasse een nieuw bestand aan te maken. :D
Hoeft ook niet in java hoor (al is het wel beter dat je het wel doet).

Re: Codeproject.com

Geplaatst: ma 13 okt 2008, 18:30
door Rogier
De main functie is zowel in C# als in Java geen globale functie. De main functie moet altijd een methode van een klasse zijn.
Van welke klasse? Er kunnen ook meerdere klassen zijn met een main functie lijkt me, hoe weet de compiler/linker dan welke als entry point voor je programma geldt?

Die main functie moet dan wel static zijn lijkt me? (anders, van welke instantie van de klasse gaat hij dan die functie aanroepen?)
Zolang je klassen importeert (includen in c++) lukt het wel om ze aan te spreken. Ook wanneer ze in dezelfde package zitten (dan is importeren zelf niet nodig).
Ja okee, nou is het bij c++ gebruikelijk om .h files te includen, en static zooi (globale functies of variabelen) die in andere .cpp's worden gedefinieerd bestaan dan normaliter alleen daar (en kunnen dus niet in andere cpp's gebruikt worden).

Maar goed, die static vs niet-static vraag ging dus over globale dingen, ik begrijp nu dat de functie waar jullie het over hadden niet globaal is.

Re: Codeproject.com

Geplaatst: ma 13 okt 2008, 19:04
door Cycloon
Rogier schreef:Van welke klasse? Er kunnen ook meerdere klassen zijn met een main functie lijkt me, hoe weet de compiler/linker dan welke als entry point voor je programma geldt?

Die main functie moet dan wel static zijn lijkt me? (anders, van welke instantie van de klasse gaat hij dan die functie aanroepen?)
Er "kunnen" meerdere klassen met een main functie zijn, maar dan is het aan jou om de compiler duidelijk te maken welke nu de echte main functie is. De rest wordt genegeerd als "echte" main functie. De main functie moet idd static zijn (door de reden die je zelf opgeeft :D ).