Share via


Algemene structuur van een C#-programma

Aanbeveling

Nieuw bij het ontwikkelen van software? Begin eerst met de handleiding Aan de slag. Ze begeleiden u bij het schrijven van uw eerste C#-programma's voordat u meer te weten komt over de programmastructuur.

Ervaren in een andere taal? Misschien wilt u de sectie Aan de slag voor C#-specifieke syntaxis overslaan en vervolgens hier terugkomen.

U bouwt C#-programma's op basis van deze kernbouwstenen: naamruimten organiseren uw typen, typen (klassen, structs, interfaces, enums en gemachtigden) definiëren gedrag en gegevens, en instructies en expressies voeren tijdens runtime werk uit. De manier waarop u het toegangspunt structureert, is afhankelijk van de toepassingsstijl die u kiest.

Uw toepassingsstijl kiezen

Wanneer u een C#-programma maakt, maakt u twee onafhankelijke keuzes over het structuren ervan:

  • Op bestand of project gebaseerd?
    • Een app op basis van bestanden wordt uitgevoerd vanuit één .cs bestand zonder projectbestand.
    • Een project-app maakt gebruik van een .csproj bestand en kan meerdere bronbestanden omvatten.
  • Instructies of Main methode op het hoogste niveau?
    • Met instructies op het hoogste niveau kunt u uitvoerbare code rechtstreeks boven aan een bestand schrijven.
    • Een Main methode verpakt het invoerpunt in een expliciete statische methode.

Zowel op project gebaseerde apps als op bestanden gebaseerde apps ondersteunen een van beide invoerpuntstijlen.

Op bestanden gebaseerde apps versus projectgebaseerde apps

Vanaf C# 14 en .NET 10 kunt u met bestandsgebaseerde apps een programma uitvoeren dat is opgenomen in één *.cs bestand zonder een projectbestand. Sla de volgende code op in een bestand met de naam hello-world.cs en voer deze uit met dotnet run hello-world.cs of dotnet hello-world.cs:

#!/usr/bin/env dotnet
Console.WriteLine("Hello, World!");

Opmerking

Met de #! regel kunnen Unix-shells het bestand rechtstreeks uitvoeren. Stel op een Unix-systeem de machtiging uitvoeren (+x) in en voer het bestand uit vanaf de opdrachtregel.

Op bestanden gebaseerde apps ondersteunen alle C#-syntaxis en kunnen preprocessorrichtlijnen gebruiken om het buildsysteem te configureren. Gebruik op bestanden gebaseerde apps voor kleine opdrachtregelprogramma's, prototypen en experimenten. Een app op basis van bestanden bestaat uit één bestand in een map:

my-app/
└── hello-world.cs

Op project gebaseerde apps maken gebruik van een .csproj bestand en de .NET CLI-opdrachtendotnet newdotnet build en dotnet run werkstroom. Kies project-apps wanneer uw programma meerdere bestanden omvat of een gedetailleerde buildconfiguratie nodig heeft. Een project-app bevat een projectbestand naast een of meer bronbestanden:

my-app/
├── my-app.csproj
├── Program.cs
├── Models/
│   └── Person.cs
└── Services/
    └── GreetingService.cs

Als uw op bestanden gebaseerde app groeit, kunt u deze eenvoudig converteren naar een project-app. Voer dotnet project convert uit om een projectbestand te genereren op basis van uw bestaande bronbestand.

Als u weet dat uw app vanaf het begin meerdere bronbestanden nodig heeft, begint u met een project-app. U vermijdt de conversiestap en kunt uw code direct in afzonderlijke bestanden ordenen.

Instructies op het hoogste niveau versus Main methode

Met behulp van instructies op het hoogste niveau kunt u uitvoerbare code rechtstreeks in één bestand schrijven zonder deze in een klasse en Main methode te verpakken. Deze stijl is de standaardinstelling wanneer u een nieuwe console-app maakt met dotnet new console. In het volgende voorbeeld ziet u een modern C#-programma dat gebruikmaakt van instructies op het hoogste niveau:

Console.WriteLine("Hello, World!");

namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }
}

Slechts één bestand in een project kan instructies op het hoogste niveau bevatten en het toegangspunt is de eerste regel programmatekst in dat bestand. Wanneer u grotere programma's bouwt, neemt u meer programma-elementen op.

U kunt ook een expliciete statische Main methode definiëren als toegangspunt van het programma:

// A skeleton of a C# program using an explicit Main method
namespace YourNamespace;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

Beide invoerpuntstijlen werken met op bestanden gebaseerde en projectgebaseerde apps. Beide stijlen ondersteunen dezelfde functies.

C#-programma's bouwen en uitvoeren

C# is een gecompileerde taal. Voor project-apps gebruikt u de dotnet build opdracht om bronbestanden te compileren in een binair pakket. Gebruik dotnet run dit om in één stap te bouwen en uit te voeren. De dotnet CLI, opgenomen in de .NET SDK, biedt veel hulpprogramma's voor het maken, bouwen en beheren van C#-projecten.

Voor bestand-gebaseerde apps compileert dotnet run hello-world.cs en voert het ene bestand rechtstreeks uit. Er is geen projectbestand vereist.

Expressies en uitspraken

Als u de Aan de slag tutorials hebt gevolgd, hebt u al uitdrukkingen en instructies geschreven. Elke coderegel die u hebt getypt, was een of de andere regel (of beide). Nu gaan we deze termen definiëren.

Expressies en instructies zijn de fundamentele bouwstenen van een C#-programma. Een expressie produceert een waarde. Een instructie voert een actie uit en eindigt meestal in een puntkomma.

Hier volgen uitdrukkingen:

  • 42 (letterlijke waarde)
  • x + y (rekenkundige bewerking)
  • Math.Max(a, b) (methode-aanroep die een waarde produceert)
  • condition ? trueValue : falseValue (voorwaardelijke expressie)
  • new Person("John") (object aanmaken)

Een instructie voert een actie uit. Instructies regelen de programmastroom, declareren variabelen of roepen bewerkingen aan. Hieronder ziet u uitspraken:

  • int x; verklaring
  • int x = 42; (verklaring met initialisatie)
  • Console.WriteLine("Hello"); (methodeaanroep)
  • if (condition) { /* code */ } (voorwaardelijke verklaring)
  • return result; (retourinstructie)

Statements bevatten vaak expressies, en expressies kunnen genest worden in andere expressies. De volgende declaratie wijst bijvoorbeeld f toe aan het resultaat van een optellingsexpressie. Met deze toevoegingsexpressie worden de resultaten van twee aanroepexpressies van de methode toegevoegd:

var maxResult = Math.Max(a, b) + Math.Max(c, d);

Zie Verklaringen voor gedetailleerde informatie over verklaringen. Zie Ledematen met expressiebodems voor meer informatie over expressiebodems.