Yleiset Pääsyoikeusmääreet
Saatat jo olla tuttu avainsanan public
kanssa. Se on näkyvyysmääre, joka määrittää, mistä luokkaa, metodia tai kenttää voidaan käyttää.
Samoin on olemassa termejä kuten private
ja protected
. Molempia näistä voidaan käyttää määrittämään metodin tai kentän saavutettavuus.
Kun kirjoitat public
ennen luokkaa, se tekee luokasta saavutettavan ohjelman eri osista (tiedostoista). Tätä osa-aluetta ei tarvitse käsitellä tarkemmin, sillä se ei kuulu tämän luvun aihepiiriin.
Kun määrität metodin tai kentän public
-näkyvyydellä, teet kyseisestä ominaisuudesta saavutettavan mistä tahansa koodin osasta olion kautta:
index.cs
1234567891011121314151617181920212223using 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); } }
Jos et halua, että olion kenttään tai metodiin pääsee käsiksi luokan ulkopuolelta, voit yksinkertaisesti määrittää sen private
-näkyvyydellä:
index.cs
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748using 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); } }
On tärkeää huomata, että private-kentät ja -metodit eivät periydy aliluokille:
index.cs
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253using 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()); } }
Jos haluat tehdä kentästä tai metodista luokan ulkopuolelta saavuttamattoman, mutta aliluokille saavutettavan, voit käyttää protected
-avainsanaa:
index.cs
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950using 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()); } }
Joskus, jotta pääsemme käsiksi luokan yksityisiin attribuutteihin, luomme julkisia metodeja, joita kutsutaan gettereiksi. Metodi getMagnitude
on esimerkki getteristä. Tämä varmistaa, että kenttä on vain luettavissa, mutta ei kirjoitettavissa, jolloin attribuutista tulee vain luku.
Jos luokan jäsenelle ei määritetä näkyvyysmäärettä, sen oletetaan olevan oletuksena private
.
1. Mikä näkyvyysmääre sallii jäsenen käytön vain määrittelevän luokan sisällä?
2. Miten luokan attribuutti voidaan tehdä saavuttamattomaksi luokan ulkopuolelta?
3. Mikä on hyvä tapa käyttää yksityisten kenttien arvoja luokan ulkopuolelta?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain the difference between public, private, and protected with examples?
Why would I use getters instead of making a field public?
Are there any best practices for choosing between these access modifiers?
Awesome!
Completion rate improved to 2.04
Yleiset Pääsyoikeusmääreet
Pyyhkäise näyttääksesi valikon
Saatat jo olla tuttu avainsanan public
kanssa. Se on näkyvyysmääre, joka määrittää, mistä luokkaa, metodia tai kenttää voidaan käyttää.
Samoin on olemassa termejä kuten private
ja protected
. Molempia näistä voidaan käyttää määrittämään metodin tai kentän saavutettavuus.
Kun kirjoitat public
ennen luokkaa, se tekee luokasta saavutettavan ohjelman eri osista (tiedostoista). Tätä osa-aluetta ei tarvitse käsitellä tarkemmin, sillä se ei kuulu tämän luvun aihepiiriin.
Kun määrität metodin tai kentän public
-näkyvyydellä, teet kyseisestä ominaisuudesta saavutettavan mistä tahansa koodin osasta olion kautta:
index.cs
1234567891011121314151617181920212223using 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); } }
Jos et halua, että olion kenttään tai metodiin pääsee käsiksi luokan ulkopuolelta, voit yksinkertaisesti määrittää sen private
-näkyvyydellä:
index.cs
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748using 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); } }
On tärkeää huomata, että private-kentät ja -metodit eivät periydy aliluokille:
index.cs
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253using 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()); } }
Jos haluat tehdä kentästä tai metodista luokan ulkopuolelta saavuttamattoman, mutta aliluokille saavutettavan, voit käyttää protected
-avainsanaa:
index.cs
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950using 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()); } }
Joskus, jotta pääsemme käsiksi luokan yksityisiin attribuutteihin, luomme julkisia metodeja, joita kutsutaan gettereiksi. Metodi getMagnitude
on esimerkki getteristä. Tämä varmistaa, että kenttä on vain luettavissa, mutta ei kirjoitettavissa, jolloin attribuutista tulee vain luku.
Jos luokan jäsenelle ei määritetä näkyvyysmäärettä, sen oletetaan olevan oletuksena private
.
1. Mikä näkyvyysmääre sallii jäsenen käytön vain määrittelevän luokan sisällä?
2. Miten luokan attribuutti voidaan tehdä saavuttamattomaksi luokan ulkopuolelta?
3. Mikä on hyvä tapa käyttää yksityisten kenttien arvoja luokan ulkopuolelta?
Kiitos palautteestasi!