Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Vanlige Tilgangsmodifikatorer | OOP-Grunnprinsipper
C# Utover Det Grunnleggende

bookVanlige Tilgangsmodifikatorer

Du er kanskje allerede kjent med nøkkelordet public. Det er en tilgangsmodifikator som definerer hvor en bestemt klasse, metode eller et felt kan nås fra.

På samme måte finnes det begreper som private og protected. Begge disse begrepene kan brukes for å angi tilgjengeligheten til en metode eller et felt.

Når du skriver public foran en klasse, gjør det klassen tilgjengelig fra ulike deler (filer) av programmet. Du trenger ikke å utforske dette aspektet i detalj, da det er utenfor rammen for dette kapittelet.

Når du angir en metode eller et felt som public, gjør du i praksis denne egenskapen til klassen tilgjengelig fra hvor som helst i koden gjennom et objekt:

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); } }

Hvis du ikke ønsker at et felt eller en metode til et objekt skal være tilgjengelig utenfor klassen, kan vi enkelt gjøre det private:

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); } }

Det er viktig å merke seg at private felt og metoder ikke arves av avledede klasser:

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()); } }

For å gjøre et felt eller en metode utilgjengelig fra utsiden av klassen, men tilgjengelig fra underklasser, kan du bruke nøkkelordet protected:

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()); } }

Noen ganger, for å få tilgang til private attributter fra en klasse, lager vi offentlige metoder kalt gettere. Metoden getMagnitude er et eksempel på en getter. Dette sikrer at feltet kun er lesbart og ikke skrivbart, noe som gjør attributtet skrivebeskyttet.

Note
Merk

Hvis ingen tilgangsmodifikator er spesifisert for et klassemedlem, antas det å være private som standard.

1. Hvilken tilgangsmodifikator tillater at et medlem kun er tilgjengelig innenfor sin definerende klasse?

2. Hvordan kan man gjøre et klasseattributt utilgjengelig fra utsiden?

3. Hva er en god måte å få tilgang til verdiene til private felt fra utsiden av klassen?

question mark

Hvilken tilgangsmodifikator tillater at et medlem kun er tilgjengelig innenfor sin definerende klasse?

Select the correct answer

question mark

Hvordan kan man gjøre et klasseattributt utilgjengelig fra utsiden?

Select the correct answer

question mark

Hva er en god måte å få tilgang til verdiene til private felt fra utsiden av klassen?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 2.04

bookVanlige Tilgangsmodifikatorer

Sveip for å vise menyen

Du er kanskje allerede kjent med nøkkelordet public. Det er en tilgangsmodifikator som definerer hvor en bestemt klasse, metode eller et felt kan nås fra.

På samme måte finnes det begreper som private og protected. Begge disse begrepene kan brukes for å angi tilgjengeligheten til en metode eller et felt.

Når du skriver public foran en klasse, gjør det klassen tilgjengelig fra ulike deler (filer) av programmet. Du trenger ikke å utforske dette aspektet i detalj, da det er utenfor rammen for dette kapittelet.

Når du angir en metode eller et felt som public, gjør du i praksis denne egenskapen til klassen tilgjengelig fra hvor som helst i koden gjennom et objekt:

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); } }

Hvis du ikke ønsker at et felt eller en metode til et objekt skal være tilgjengelig utenfor klassen, kan vi enkelt gjøre det private:

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); } }

Det er viktig å merke seg at private felt og metoder ikke arves av avledede klasser:

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()); } }

For å gjøre et felt eller en metode utilgjengelig fra utsiden av klassen, men tilgjengelig fra underklasser, kan du bruke nøkkelordet protected:

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()); } }

Noen ganger, for å få tilgang til private attributter fra en klasse, lager vi offentlige metoder kalt gettere. Metoden getMagnitude er et eksempel på en getter. Dette sikrer at feltet kun er lesbart og ikke skrivbart, noe som gjør attributtet skrivebeskyttet.

Note
Merk

Hvis ingen tilgangsmodifikator er spesifisert for et klassemedlem, antas det å være private som standard.

1. Hvilken tilgangsmodifikator tillater at et medlem kun er tilgjengelig innenfor sin definerende klasse?

2. Hvordan kan man gjøre et klasseattributt utilgjengelig fra utsiden?

3. Hva er en god måte å få tilgang til verdiene til private felt fra utsiden av klassen?

question mark

Hvilken tilgangsmodifikator tillater at et medlem kun er tilgjengelig innenfor sin definerende klasse?

Select the correct answer

question mark

Hvordan kan man gjøre et klasseattributt utilgjengelig fra utsiden?

Select the correct answer

question mark

Hva er en god måte å få tilgang til verdiene til private felt fra utsiden av klassen?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3
some-alt