Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Vanliga Åtkomstmodifierare | OOP-Grunder
C# Bortom Grunderna

bookVanliga Åtkomstmodifierare

Du kanske redan är bekant med nyckelordet public. Det är en åtkomstmodifierare som definierar var en viss klass, metod eller ett fält kan nås ifrån.

På liknande sätt finns det termer som private och protected. Båda dessa termer kan användas för att specificera åtkomsten för en metod eller ett fält.

När du skriver public före en klass gör det helt enkelt klassen tillgänglig från olika delar (filer) av programmet. Du behöver inte fördjupa dig i den aspekten eftersom det ligger utanför detta kapitels omfattning.

När du specificerar en metod eller ett fält som public gör du i princip den egenskapen hos klassen tillgänglig från var som helst i koden via ett 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); } }

Om du inte vill att ett fält eller en metod i ett objekt ska vara tillgänglig utanför klassen kan vi helt enkelt göra 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 är viktigt att notera att privata fält och metoder inte ärvs av underklasser:

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

För att göra ett fält eller en metod otillgänglig utanför klassen men tillgänglig för underklasser, kan du använda nyckelordet 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()); } }

Ibland, för att kunna komma åt privata attribut från en klass, skapar vi publika metoder som kallas getters. Metoden getMagnitude är ett exempel på en getter. Detta säkerställer att fältet endast är läsbart och inte skrivbart, vilket gör attributet skrivskyddat.

Note
Notera

Om ingen åtkomstmodifierare anges för en klassmedlem antas den vara private som standard.

1. Vilken åtkomstmodifierare tillåter att en medlem endast är tillgänglig inom sin definierande klass?

2. Hur kan man göra ett klassattribut otillgängligt utifrån?

3. Vad är ett bra sätt att komma åt värdena för privata fält utanför klassen?

question mark

Vilken åtkomstmodifierare tillåter att en medlem endast är tillgänglig inom sin definierande klass?

Select the correct answer

question mark

Hur kan man göra ett klassattribut otillgängligt utifrån?

Select the correct answer

question mark

Vad är ett bra sätt att komma åt värdena för privata fält utanför klassen?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 2.04

bookVanliga Åtkomstmodifierare

Svep för att visa menyn

Du kanske redan är bekant med nyckelordet public. Det är en åtkomstmodifierare som definierar var en viss klass, metod eller ett fält kan nås ifrån.

På liknande sätt finns det termer som private och protected. Båda dessa termer kan användas för att specificera åtkomsten för en metod eller ett fält.

När du skriver public före en klass gör det helt enkelt klassen tillgänglig från olika delar (filer) av programmet. Du behöver inte fördjupa dig i den aspekten eftersom det ligger utanför detta kapitels omfattning.

När du specificerar en metod eller ett fält som public gör du i princip den egenskapen hos klassen tillgänglig från var som helst i koden via ett 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); } }

Om du inte vill att ett fält eller en metod i ett objekt ska vara tillgänglig utanför klassen kan vi helt enkelt göra 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 är viktigt att notera att privata fält och metoder inte ärvs av underklasser:

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

För att göra ett fält eller en metod otillgänglig utanför klassen men tillgänglig för underklasser, kan du använda nyckelordet 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()); } }

Ibland, för att kunna komma åt privata attribut från en klass, skapar vi publika metoder som kallas getters. Metoden getMagnitude är ett exempel på en getter. Detta säkerställer att fältet endast är läsbart och inte skrivbart, vilket gör attributet skrivskyddat.

Note
Notera

Om ingen åtkomstmodifierare anges för en klassmedlem antas den vara private som standard.

1. Vilken åtkomstmodifierare tillåter att en medlem endast är tillgänglig inom sin definierande klass?

2. Hur kan man göra ett klassattribut otillgängligt utifrån?

3. Vad är ett bra sätt att komma åt värdena för privata fält utanför klassen?

question mark

Vilken åtkomstmodifierare tillåter att en medlem endast är tillgänglig inom sin definierande klass?

Select the correct answer

question mark

Hur kan man göra ett klassattribut otillgängligt utifrån?

Select the correct answer

question mark

Vad är ett bra sätt att komma åt värdena för privata fält utanför klassen?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3
some-alt