Gå til indholdet

Konsolapplikationer

I materialet bruges konsolapplikationer til at afprøve kode, og lidt forvirrende er der tre forskellige versioner: enkeltfils-afvikling (.NET 10), med top-level statements (script version) og uden top-level statements (traditionel version).

Information til undervisere

Det er vigtigt at kursisten prøver selv - få dem til at kode!!

Enkeltfils-afvikling (.NET 10)

Fra .NET 10 er det blevet muligt at afvikle en enkelt C#-fil direkte uden at skulle oprette et projekt. Dette er den absolut nemmeste måde at komme i gang på, og er perfekt til hurtige tests, læring og eksperimenter.

Grundlæggende eksempel

Opret en fil kaldet hello.cs med følgende indhold:

Console.WriteLine("Hello World!");

Afvikl den direkte:

dotnet hello.cs

Det er alt! Ingen projektfil, ingen mappe-struktur - bare en enkelt fil.

Brug af variabler og logik

Du kan skrive helt almindelig C# kode i filen:

string navn = "Anders";
int alder = 25;

Console.WriteLine($"Hej {navn}, du er {alder} år gammel");

if (alder >= 18)
{
    Console.WriteLine("Du er myndig");
}

for (int i = 0; i < 5; i++)
{
    Console.WriteLine($"Tæller: {i}");
}

Brug af NuGet pakker

Du kan også bruge NuGet pakker direkte i enkeltfiler ved at tilføje en reference øverst i filen med #r "nuget: PakkeNavn":

#r "nuget: Spectre.Console, 0.49.1"

using Spectre.Console;

AnsiConsole.Write(
    new FigletText("Hello World!")
        .Centered()
        .Color(Color.Blue));

var table = new Table();
table.AddColumn("Navn");
table.AddColumn("Alder");
table.AddRow("Anders", "25");
table.AddRow("Maria", "30");

AnsiConsole.Write(table);

Første gang du afvikler filen, vil .NET automatisk downloade og cache NuGet pakken.

Fordele og begrænsninger

Fordele:

  • Ekstremt hurtigt at komme i gang
  • Ingen projektfil eller mappestruktur nødvendig
  • Perfekt til prototyping og læring
  • Kan bruge NuGet pakker direkte
  • Understøtter async/await

Begrænsninger:

  • Kun én fil pr. program
  • Ikke velegnet til større applikationer
  • Begrænset intellisense i nogle editorer
  • Ingen projekt-konfigurationsmuligheder

Hvornår skal jeg bruge enkeltfils-afvikling?

  • Når du skal teste en lille kodestump hurtigt
  • Når du lærer nye koncepter i C#
  • Til små scripts og automatiseringsopgaver
  • Når du demonstrerer kode for andre

Til mere komplekse applikationer med flere filer og avancerede konfigurationer, bør du bruge et fuldt projekt.

Konsolapplikation uden Top-Level Statements (projekt version)

Traditionelt har en konsolapplikation i C# en Main metode i en klasse. Her er et eksempel på en simpel konsolapplikation uden top-level statements:

using System;

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

Konsolapplikation med Top-Level Statements (script version)

C# 9 introducerede top-level statements, som forenkler koden ved at fjerne behovet for en Main metode og en indkapslende klasse. Her er et eksempel på en konsolapplikation med top-level statements:

using System;

Console.WriteLine("Hello World!");

Denne version er god til helt små projekter hvor namespace med videre ikke er så vigtigt.

Avanceret: Asynkron Konsolapplikation - ikke vigtigt for begyndere

I mere avanceret kode skabe asynkrone applikationer og her bruges en anden skabelon hvor Main metoden skal have returtypen Task. Her er et eksempel på en asynkron konsolapplikation uden top-level statements:

using System;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            await Console.Out.WriteLineAsync("Hello World!");
        }
    }
}

Og her er et eksempel på en asynkron konsolapplikation med top-level statements:

using System;
using System.Threading.Tasks;

await Console.Out.WriteLineAsync("Hello World!");

Visual Studio Code

I Visual Studio Code kan du vælge mellem de to versioner ved at skabe et projekt i terminalen.

Følgende skaber den “simple” version:

dotnet new console -o myApp

og følgende skaber den “traditionelle” version:

dotnet new console --use-program-main

Visual Studio

I Visual Studio kan du vælge mellem de to versioner ved at skabe et projekt af typen Console application, angive navn med videre, og så angive hvilken version du ønsker i checkboksen “Do not use Top-Level Statements”:

Vælg af konsol applikation
  • Hvis der ikke sættes kryds skabes en traditionel konsol applikation uden top-level statements.
  • Hvis der sættes kryds skabes en script baseres konsol applikation med top-level statements.

Info

Så snart du er lidt øvet så brug konsol applikationer uden top-level statements (den traditionelle form med en klasse Program og en statisk Main-metode).

Spørgsmål til AI

For at få mest muligt ud af AI-værktøjer som ChatGPT, er det vigtigt at stille klare og præcise spørgsmål (og skabe det rigtige kontekst - se her). Her er nogle spørgsmål til denne side:

Grundlæggende spørgsmål til AI

  • Hvad er en konsolapplikation i C#?
  • Hvad er forskellen mellem top-level statements og traditionel Main metode?
  • Hvornår skal jeg bruge top-level statements vs traditionel struktur?
  • Hvordan læser jeg input fra brugeren i en konsolapplikation?
  • Hvordan skriver jeg output til konsollen?
  • Hvad betyder “static void Main(string[] args)”?