Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Algemene Toegangsmodificatoren | OOP Essentials
C# Verder dan de Basis

bookAlgemene Toegangsmodificatoren

Je bent waarschijnlijk al bekend met het sleutelwoord public. Dit is een toegangsmodifier die bepaalt waar een bepaalde klasse, methode of een veld toegankelijk is.

Op vergelijkbare wijze zijn er termen zoals private en protected. Beide termen kunnen worden gebruikt om de toegankelijkheid van een methode of een veld te specificeren.

Wanneer je public voor een klasse plaatst, wordt de klasse eenvoudigweg toegankelijk vanuit verschillende delen (bestanden) van het programma. Je hoeft dat aspect niet in detail te onderzoeken, aangezien dit buiten de scope van dit hoofdstuk valt.

Wanneer je een methode of een veld als public specificeert, maak je die eigenschap van de klasse in feite overal binnen de code toegankelijk via een object:

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; public class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // We can directly access 'public' fields of an object using the dot '.' symbol Console.WriteLine(p.x); Console.WriteLine(p.y); } }

Als je niet wilt dat een veld of een methode van een object buiten de klasse toegankelijk is, kun je deze eenvoudigweg private maken:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } // A private method can only be used inside the class. // Trying to use a private method outside the class might result in a compilation error. private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } // Sometimes, to be able to access data from a private field, we make public methods // which specifically retrieve the value of that field. Such methods are called "getters", // and such fields are called "read-only" fields as we can access their data but cannot modify it from outside the class. public double getMagnitude() { return magnitude; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // Correct Console.WriteLine(p.getMagnitude()); // Error Console.WriteLine(p.calculateMagnitude()); // Error Console.WriteLine(p.magnitude); } }

Het is belangrijk op te merken dat de private velden en methoden niet worden geërfd door afgeleide klassen:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; // The 'base(x, y)' part simply calls the constructor of the 'Point' class with 'x' and 'y' values. // This will be more thoroughly explained in the later section. public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // Error calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); // Correct according to rules of language, however note that it will give the magnitude of x and y excluding z (for a 2D point) so logically the result will be wrong Console.WriteLine(p.getMagnitude()); } }

Om een veld of methode ontoegankelijk te maken van buiten de klasse, maar wel toegankelijk voor afgeleide klassen, kan het sleutelwoord protected worden gebruikt:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
using System; class Point { public int x; public int y; protected double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } protected double calculateMagnitude() { // Math.Sqrt() is the squareroot function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // No Error Now calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); Console.WriteLine(p.getMagnitude()); } }

Soms worden er publieke methoden aangemaakt, zogenaamde getters, om toegang te krijgen tot private attributen van een klasse. De methode getMagnitude is een voorbeeld van een getter. Dit zorgt ervoor dat het veld alleen leesbaar is en niet beschrijfbaar, waardoor dat attribuut alleen-lezen wordt.

Note
Opmerking

Als er geen toegangsmodifier is gespecificeerd voor een klasse-lid, wordt deze standaard als private beschouwd.

1. Welke toegangsmodifier zorgt ervoor dat een lid alleen toegankelijk is binnen de klasse waarin het is gedefinieerd?

2. Hoe kan een klasse-attribuut ontoegankelijk worden gemaakt van buitenaf?

3. Wat is een goede manier om de waarden van private velden van buiten de klasse te benaderen?

question mark

Welke toegangsmodifier zorgt ervoor dat een lid alleen toegankelijk is binnen de klasse waarin het is gedefinieerd?

Select the correct answer

question mark

Hoe kan een klasse-attribuut ontoegankelijk worden gemaakt van buitenaf?

Select the correct answer

question mark

Wat is een goede manier om de waarden van private velden van buiten de klasse te benaderen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 2.04

bookAlgemene Toegangsmodificatoren

Veeg om het menu te tonen

Je bent waarschijnlijk al bekend met het sleutelwoord public. Dit is een toegangsmodifier die bepaalt waar een bepaalde klasse, methode of een veld toegankelijk is.

Op vergelijkbare wijze zijn er termen zoals private en protected. Beide termen kunnen worden gebruikt om de toegankelijkheid van een methode of een veld te specificeren.

Wanneer je public voor een klasse plaatst, wordt de klasse eenvoudigweg toegankelijk vanuit verschillende delen (bestanden) van het programma. Je hoeft dat aspect niet in detail te onderzoeken, aangezien dit buiten de scope van dit hoofdstuk valt.

Wanneer je een methode of een veld als public specificeert, maak je die eigenschap van de klasse in feite overal binnen de code toegankelijk via een object:

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; public class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // We can directly access 'public' fields of an object using the dot '.' symbol Console.WriteLine(p.x); Console.WriteLine(p.y); } }

Als je niet wilt dat een veld of een methode van een object buiten de klasse toegankelijk is, kun je deze eenvoudigweg private maken:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } // A private method can only be used inside the class. // Trying to use a private method outside the class might result in a compilation error. private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } // Sometimes, to be able to access data from a private field, we make public methods // which specifically retrieve the value of that field. Such methods are called "getters", // and such fields are called "read-only" fields as we can access their data but cannot modify it from outside the class. public double getMagnitude() { return magnitude; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // Correct Console.WriteLine(p.getMagnitude()); // Error Console.WriteLine(p.calculateMagnitude()); // Error Console.WriteLine(p.magnitude); } }

Het is belangrijk op te merken dat de private velden en methoden niet worden geërfd door afgeleide klassen:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; // The 'base(x, y)' part simply calls the constructor of the 'Point' class with 'x' and 'y' values. // This will be more thoroughly explained in the later section. public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // Error calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); // Correct according to rules of language, however note that it will give the magnitude of x and y excluding z (for a 2D point) so logically the result will be wrong Console.WriteLine(p.getMagnitude()); } }

Om een veld of methode ontoegankelijk te maken van buiten de klasse, maar wel toegankelijk voor afgeleide klassen, kan het sleutelwoord protected worden gebruikt:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
using System; class Point { public int x; public int y; protected double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } protected double calculateMagnitude() { // Math.Sqrt() is the squareroot function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // No Error Now calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); Console.WriteLine(p.getMagnitude()); } }

Soms worden er publieke methoden aangemaakt, zogenaamde getters, om toegang te krijgen tot private attributen van een klasse. De methode getMagnitude is een voorbeeld van een getter. Dit zorgt ervoor dat het veld alleen leesbaar is en niet beschrijfbaar, waardoor dat attribuut alleen-lezen wordt.

Note
Opmerking

Als er geen toegangsmodifier is gespecificeerd voor een klasse-lid, wordt deze standaard als private beschouwd.

1. Welke toegangsmodifier zorgt ervoor dat een lid alleen toegankelijk is binnen de klasse waarin het is gedefinieerd?

2. Hoe kan een klasse-attribuut ontoegankelijk worden gemaakt van buitenaf?

3. Wat is een goede manier om de waarden van private velden van buiten de klasse te benaderen?

question mark

Welke toegangsmodifier zorgt ervoor dat een lid alleen toegankelijk is binnen de klasse waarin het is gedefinieerd?

Select the correct answer

question mark

Hoe kan een klasse-attribuut ontoegankelijk worden gemaakt van buitenaf?

Select the correct answer

question mark

Wat is een goede manier om de waarden van private velden van buiten de klasse te benaderen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3
some-alt