Grundlæggende programmering - Applikatix/Wiki GitHub Wiki

Målpinde

H1

  1. Eleven kan anvende et programmeringssprog til at udarbejde mindre konsol programmer, herunder fejlfinde og teste dem (overordnet mål som punkt 1-12 dækker).
  2. Eleven kan vælge en hensigtsmæssig datatype til en opgave.
  3. Eleven kan oprette og gøre brug af både enkelt og multidimensionelle arrays.
  4. Eleven kan erklære og anvende simple metoder.
  5. Eleven kan diagrammere sit arbejde.
  6. Eleven kan benytte forskellige kontrolstrukturer.
  7. Eleven kan erklære og bruge variable samt konstanter.
  8. Eleven kan redegøre for brugen af kodekommentar.
  9. Eleven kan versionsstyre sit arbejde.
  10. Eleven kan benytte et debugging værktøj.
  11. Eleven kan vælge hensigtsmæssige datatyper til variable og metoder.
  12. Eleven kan erklære og oprette metoder i et objekt med og uden returværdi og parametre, samt gøre brug af disse.

Overblik

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

Typer

Namespace

namespace [Name] { [Types]... }

Et namespace er en måde at organisere typer på. I et namespace kan man have forskellige typer (Klasser, Strukture, osv.) og andre namespaces. Hved at bruger using [Namespace]; kan du bruge alle offentlige typer i det namespace. F.eks. hvis du vil bruge List<T> skal du i toppen af dit program skrive using System.Collections.Generic; fordi List<T> typen ligger i namespacet Generic som ligger i Collections som ligger i System.

using System;

namespace Namespace {
    public class Class { }

    public struct Struct { }

    public enum Enum { }

    public record Record(int A, string B, bool C);

    namespace SubNamespace {
        // Flere typer
        // ...
    }
}

Access modifier

Alle typer og type medlemmer har en bestemt synlighed/access level der styre hvor de kan blive kaldet fra. En type/medlem kan være:

  • private: Kan kun bruges i den samme klasse/struktur de er defineret.
  • public: Kan bruges hvor som helst i projektet og andre projekter der referere til det.
  • protected: Kan kun bruges i den samme klasse de er defineret eller klasser der arver fra den.
  • internal: Kan kun bruges i det samme projekt de er defineret (Helt teknisk kan de kun bruges i den samme "Assembly", dvs. .exe eller .dll fil).

Class/Klasse

[access modifier] [static](/Applikatix/Wiki/wiki/static) class [Name] { [members]... }

En klasse er en reference type. Når man laver en instans af en klasse med new operatoren og gemmer den i en variabel, gemmer man en reference til objektet.

class Class {
    private int field;

    public int Property {
        get { /*return*/ }
        set { /*assign*/ }
    }

    public Class(int n) { }

    public void Method(int n) { }
}
int x = 5;
int y = x;
x = 10;

Console.WriteLine(x); // 10
Console.WriteLine(y); // 5

var a = new Class(5);
var b = a;
a.Property = 10;

Console.WriteLine(a.Property); // 10
Console.WriteLine(b.Property); // 10

Members/Medlemmer

Field/feldt

[access modifier] [static](/Applikatix/Wiki/wiki/static) [readonly](/Applikatix/Wiki/wiki/readonly) [type] [_name] [= value](/Applikatix/Wiki/wiki/=-value);

Et feldt er en variabel der indeholder noget data. Som udgangspunkt skal feldter være private og må kun kunne tilgåes udefra med en egenskab.

    private int field;

    private static string static_field = "text";

    private readonly bool readonly_field;

Constructor/Konstruktør

[access modifier] [Class name] ([parameters,]...) { [body] }

En konstruktør bruges når man laver en ny instans af en klasse med 'new'.

    public Class(int num) {
        field = num;
    }
Class x = new Class(5);

Property/Egenskab

[access modifier] [type] [Name] {
    get { [return value] }
    set { [set value] }
}

En egenskab er en slags 'brugerinterfase' for et feldt så man kan styre hvordan en bruger af objektet kan bruge den indkapslede data. Den har en 'Get' metode, der bruges til at hente en værdi fra et objekt, og en 'Set' metode, der bruges til at tildele en værdi.

    public int Property {
        get {
            // kode...
            return field;
        }
        set {
            // kode...
            field = value;
        }
    }

    // Forkorted måde at skrive property på hvis der ikke er kode at afvikle
    public int AutoProperty { get; set; }

    // Flere muligheder
    public int Value1 { get; private set; } // Endten 'get' eller 'set' kan have en anden access modifier
    public int Value2 { get; init; } // Med 'init' kan værdien kun sættes i en 'object initializor' eller konstruktør
    public int Value3 { get; } // Man kan undvære endten 'get' eller 'set' (autoimplimenterede properties skal have 'get')
obj.Property = 5; //set
int x = obj.Property; //get

Method/Metode

[access modifier] [static](/Applikatix/Wiki/wiki/static) [return type] [Name] ([parameters,]...) { [body] }

En metode er en funktion der er associeret med en bestemt klasse.

    public void Method() {
        field++;
    }

    public static string StaticMethod(string str) {
        static_field += str;
        return static_field;
    }
obj.Method();
Class.StaticMethod("tekst");