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# Access Modifiers: Public, Private, Protected, Internal en Meer

C# Access Modifiers Begrijpen

Deze gids legt uit hoe de diverse C# access modifiers — public, private, protected, internal, protected internal en private protected — de zichtbaarheid van types en leden controleren. Realistische codevoorbeelden illustreren elk modifier's effect.

In C# bepalen access modifiers wie velden kan lezen of schrijven, methodes kan aanroepen of types kan instantiëren. Bijvoorbeeld:

class Student {
    public string name;
    private int num;
}

Hier is name overal zichtbaar, terwijl num beperkt is tot de Student klasse.

Typen Access Modifiers

  • public
  • private
  • protected
  • internal
  • protected internal
  • private protected

1. Public Access Modifier

Een type of lid gemarkeerd als public maakt het toegankelijk vanuit elke code die de assembly kan refereren.

using System;
namespace MyApplication {
    class Student {
        public string name = "Sheeran";
        public void Print() {
            Console.WriteLine("Hallo vanuit Student klasse");
        }
    }
    class Program {
        static void Main(string[] args) {
            Student student1 = new Student();
            Console.WriteLine("Naam: " + student1.name);
            student1.Print();
            Console.ReadLine();
        }
    }
}

Output

Naam: Sheeran
Hallo vanuit Student klasse

Omdat zowel het veld als de methode public zijn, kan de Program klasse ze vrij benaderen.

Tip: Het object student1 wordt gebruikt om de leden van Student te benaderen. Meer leren over C# class and objects.


2. Private Access Modifier

Een private lid is alleen zichtbaar binnen de declarerende class of struct. Buitencode, zoals dergelijke leden, triggeren compileerfouten.

using System;
namespace MyApplication {
    class Student {
        private string name = "Sheeran";
        private void Print() {
            Console.WriteLine("Hallo vanuit Student klasse");
        }
    }
    class Program {
        static void Main(string[] args) {
            Student student1 = new Student();
            Console.WriteLine("Naam: " + student1.name);
            student1.Print();
            Console.ReadLine();
        }
    }
}

Het proberen name of Print te benaderen vanuit Program resulteert in:

CS0122 'Student.name' is inaccessible due to its protection level
CS0122 'Student.Print()' is inaccessible due to its protection level

3. Protected Access Modifier

Leden gemarkeerd protected zijn toegankelijk binnen hun eigen klasse en alle afgeleide klassen, ongeacht assembly.

using System;
namespace MyApplication {
    class Student {
        protected string name = "Sheeran";
    }
    class Program : Student {
        static void Main(string[] args) {
            Program program = new Program();
            Console.WriteLine("Naam: " + program.name);
            Console.ReadLine();
        }
    }
}

Output

Naam: Sheeran

Hier erft Program van Student, wat het in staat stelt de protected name veld te benaderen.


4. Internal Access Modifier

Een internal lid is alleen zichtbaar binnen dezelfde assembly — een logische eenheid van gecompileerde code. Assemblies worden aangemaakt door de compiler bij het bouwen van een project.

Binnen een enkele assembly:

using System;
namespace Assembly {
    class Student {
        internal string name = "Sheeran";
    }
    class Program {
        static void Main(string[] args) {
            Student theStudent = new Student();
            Console.WriteLine("Naam: " + theStudent.name);
            Console.ReadLine();
        }
    }
}

Output

Naam: Sheeran

Wanneer dezelfde assembly probeert het veld te benaderen, gedraagt het zich als public omdat internal leden gedeeld worden over de hele assembly.

In een andere assembly is het veld onbereikbaar:

// Assembly1
using System;
namespace Assembly1 {
    public class StudentName {
        internal string name = "Sheeran";
    }
}
// Assembly2
using System;
using Assembly1;
namespace Assembly2 {
    class Program {
        static void Main(string[] args) {
            StudentName student = new StudentName();
            Console.Write(student.name); // CS0122
            Console.ReadLine();
        }
    }
}

Het compileren van Assembly2 produceert:

CS0122 'StudentName.name' is inaccessible due to its protection level

5. Protected Internal Access Modifier

De protected internal combinatie staat toegang toe vanuit dezelfde assembly of van afgeleide typen in andere assemblies.

// Assembly1
using System;
namespace Assembly1 {
    public class Greet {
        protected internal string msg = "Hallo";
    }
}
// Assembly2
using System;
using Assembly1;
namespace Assembly2 {
    class Program : Greet {
        static void Main(string[] args) {
            Program greet = new Program();
            Console.Write(greet.msg);
            Console.ReadLine();
        }
    }
}

Output

Hallo

6. Private Protected Access Modifier

Geïntroduceerd in C# 7.2, private protected beperkt zichtbaarheid tot de declarerende klasse en afgeleide klassen binnen dezelfde assembly.

// Assembly1
using System;
namespace Assembly1 {
    public class StudentName {
        private protected string name = "Sheeran";
    }
    class Program1 : StudentName {
        static void Main(string[] args) {
            Program1 student = new Program1();
            Console.Write(student.name);
            Console.ReadLine();
        }
    }
}
// Assembly2
using System;
using Assembly1;
namespace Assembly2 {
    class Program : StudentName {
        static void Main(string[] args) {
            Program student = new Program();
            Console.Write(student.name); // CS0122
            Console.ReadLine();
        }
    }
}

Toegang vanuit Assembly2 faalt omdat het lid niet blootgelegd is buiten zijn assembly, zelfs niet in afgeleide typen.

Let op: Terwijl typen (klassen, interfaces, etc.) public en internal kunnen gebruiken, gelden alle andere modifiers alleen voor leden.

C Taal

  1. C# Classes & Objects: Fundamenten voor Robuuste OOP
  2. C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
  3. C# Abstract Classes & Methods: Een Praktische Gids
  4. C# Geneste Classes: Definitie, Gebruik en Inheritance
  5. C# Partial Classes en Methods: Een Praktische Gids
  6. C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
  7. C++ Class Templates Beheersen: Een Praktische Gids
  8. C-opslagklassen begrijpen: Bereik, levensduur en prestaties
  9. Polymorfisme in C++ Begrijpen: Een Praktische Gids
  10. Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding
  11. Java Modifiers Uitgelegd: Typen, Gebruik en Best Practices