Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C# Klassen Beheersen: Blauwprint voor Krachtig Objectgeoriënteerd Programmeren

Een klasse definieert een blauwprint voor een datatype. Het definieert wat de klassenaam betekent: waaruit een object bestaat en welke operaties mogelijk zijn. Objecten zijn instanties van een klasse. Methodes en variabelen heten leden.

Een Klasse Definiëren

Algemene vorm:

<toegangsspecificatie> class klasse_naam {
    // lidvariabelen
    <toegangsspecificatie> <datatype> variabele1;
    ...
    // lidmethodes
    <toegangsspecificatie> <retourtype> methode1(parameterlijst) { ... }
    ...
}

Let op:

  • Standaard toegangsspecificatie voor klasse: internal; voor leden: private.
  • Leden benaderen via de puntoperator ..

Voorbeeld: Eenvoudige Box-klasse

using System;

namespace DoosApplicatie {
    class Doos {
        public double lengte;
        public double breedte;
        public double hoogte;
    }
    class DoosTester {
        static void Main(string[] args) {
            Doos Doos1 = new Doos();
            Doos Doos2 = new Doos();
            double volume = 0.0;

            Doos1.hoogte = 5.0; Doos1.lengte = 6.0; Doos1.breedte = 7.0;
            Doos2.hoogte = 10.0; Doos2.lengte = 12.0; Doos2.breedte = 13.0;

            volume = Doos1.hoogte * Doos1.lengte * Doos1.breedte;
            Console.WriteLine("Volume Doos1: {0}", volume);

            volume = Doos2.hoogte * Doos2.lengte * Doos2.breedte;
            Console.WriteLine("Volume Doos2: {0}", volume);
            Console.ReadKey();
        }
    }
}

Uitvoer: Volume Doos1: 210, Volume Doos2: 1560

Lidfuncties en Encapsulatie

Lidfuncties zijn gedefinieerd binnen de klasse. Lidvariabelen (attributen) worden private gehouden voor encapsulatie; toegang via publieke methodes.

Voorbeeld: Setters/Getters

using System;

namespace DoosApplicatie {
    class Doos {
        private double lengte, breedte, hoogte;
        public void StelLengteIn(double len) { lengte = len; }
        public void StelBreedteIn(double bre) { breedte = bre; }
        public void StelHoogteIn(double hei) { hoogte = hei; }
        public double KrijgVolume() { return lengte * breedte * hoogte; }
    }
    class DoosTester {
        static void Main(string[] args) {
            Doos Doos1 = new Doos(), Doos2 = new Doos();
            double volume;

            Doos1.StelLengteIn(6.0); Doos1.StelBreedteIn(7.0); Doos1.StelHoogteIn(5.0);
            Doos2.StelLengteIn(12.0); Doos2.StelBreedteIn(13.0); Doos2.StelHoogteIn(10.0);

            volume = Doos1.KrijgVolume();
            Console.WriteLine("Volume Doos1: {0}", volume);
            volume = Doos2.KrijgVolume();
            Console.WriteLine("Volume Doos2: {0}", volume);
            Console.ReadKey();
        }
    }
}

C# Constructors

Een constructor is een speciale lidfunctie die uitgevoerd wordt bij objectcreatie. Heeft dezelfde naam als de klasse, geen retourtype.

Voorbeeld: Default Constructor

using System;

namespace LijnApplicatie {
    class Lijn {
        private double lengte;
        public Lijn() { Console.WriteLine("Object wordt aangemaakt"); }
        public void StelLengteIn(double len) { lengte = len; }
        public double KrijgLengte() { return lengte; }
        static void Main(string[] args) {
            Lijn lijn = new Lijn();
            lijn.StelLengteIn(6.0);
            Console.WriteLine("Lengte van lijn: {0}", lijn.KrijgLengte());
            Console.ReadKey();
        }
    }
}

Uitvoer: Object wordt aangemaakt, Lengte van lijn: 6

Parameterized Constructor

public Lijn(double len) {
    Console.WriteLine("Object wordt aangemaakt, lengte = {0}", len);
    lengte = len;
}

Gebruik: Lijn lijn = new Lijn(10.0);

C# Destructors

Een destructor (~KlasseNaam) wordt uitgevoerd wanneer een object out-of-scope gaat. Geen parameters, geen retourwaarde. Nuttig voor vrijgeven resources. Kan niet geërfd of overloaded worden.

Voorbeeld

using System;

namespace LijnApplicatie {
    class Lijn {
        private double lengte;
        public Lijn() { Console.WriteLine("Object wordt aangemaakt"); }
        ~Lijn() { Console.WriteLine("Object wordt verwijderd"); }
        public void StelLengteIn(double len) { lengte = len; }
        public double KrijgLengte() { return lengte; }
        static void Main(string[] args) {
            Lijn lijn = new Lijn();
            lijn.StelLengteIn(6.0);
            Console.WriteLine("Lengte van lijn: {0}", lijn.KrijgLengte());
        }
    }
}

Uitvoer: Object wordt aangemaakt, Lengte van lijn: 6, Object wordt verwijderd

Statische Leden van een C# Klasse

Met static keyword: slechts één kopie per klasse, ongeacht aantal instanties.

Voorbeeld: Statische Variabele

using System;

namespace StatischVarApplicatie {
    class StatischVar {
        public static int num;
        public void Tel() { num++; }
        public int KrijgNum() { return num; }
    }
    class StatischTester {
        static void Main(string[] args) {
            StatischVar s1 = new StatischVar(), s2 = new StatischVar();
            s1.Tel(); s1.Tel(); s1.Tel();
            s2.Tel(); s2.Tel(); s2.Tel();
            Console.WriteLine("Variabele num voor s1: {0}", s1.KrijgNum()); // 6
            Console.WriteLine("Variabele num voor s2: {0}", s2.KrijgNum()); // 6
            Console.ReadKey();
        }
    }
}

Voorbeeld: Statische Functie

public static int KrijgNum() { return num; }
// Aanroep: StatischVar.KrijgNum() zonder instantie

C Taal

  1. C# Classes & Objects: Fundamenten voor Robuuste OOP
  2. C# Access Modifiers: Public, Private, Protected, Internal en Meer
  3. C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
  4. C# Abstract Classes & Methods: Een Praktische Gids
  5. C# Geneste Classes: Definitie, Gebruik en Inheritance
  6. C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
  7. C-opslagklassen: Scope, levensduur en gebruik
  8. Storage Classes in C++ Begrijpen: Scope, Levensduur en Gebruik
  9. C++ Interfaces: Abstracte Klassen & Pure Virtual Functions Beheersen
  10. C# Programma Structuur: Kerncomponenten & Hello World Voorbeeld
  11. C# Fundamentals: Basis Syntaxis & OOP Concepten