Pengubah Akses
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 31 dari 70.
Pengubah akses mengatur siapa yang dapat melihat dan menggunakan anggota class-mu. Pengubah ini adalah dasar enkapsulasi, salah satu prinsip inti OOP. Dengan membatasi akses, kamu melindungi datamu dan membuat batasan yang jelas dalam kodemu.
C# menyediakan empat access modifier utama:
public class BankAccount
{
public string AccountHolder; // Dapat diakses dari mana saja
private decimal balance; // Hanya di dalam class ini
protected string accountType; // Di dalam class ini dan class turunannya
internal int branchCode; // Di dalam assembly yang sama
}Member public dapat diakses dari kode mana pun.
Anggota private hanya dapat diakses di dalam class yang sama. Ini adalah tingkat pembatasan tertinggi dan merupakan pengaturan default untuk anggota class.
protected memungkinkan akses dari class itu sendiri dan class apa pun yang mewarisinya.
internal membatasi akses ke kode dalam assembly (proyek) yang sama.
Jika tidak ada modifier yang ditentukan, member class secara default bersifat private:
class Example
{
int secret; // secara bawaan bersifat private
}Memilih tingkat akses yang tepat berarti hanya membuka hal yang diperlukan. Mulailah dengan private dan tingkatkan visibilitas hanya jika kamu punya alasan yang jelas. Ini mencegah kode lain bergantung pada detail implementasi yang mungkin ingin kamu ubah nanti.
Tantangan
MudahMari bangun sistem profil pengguna yang aman untuk menunjukkan bagaimana access modifier melindungi data sensitif sekaligus hanya menampilkan informasi yang diperlukan. Kamu akan membuat class dengan tingkat visibilitas berbeda untuk setiap informasi, berdasarkan siapa yang seharusnya dapat mengaksesnya.
Kamu akan membagi kodemu ke dalam tiga file:
UserProfile.cs: Buat classUserProfiledi namespaceSecurityuntuk mengelola informasi pengguna dengan tingkat akses yang sesuai. Profil ini harus memiliki:- Property
publicUsername(string), siapa pun dapat melihat nama pengguna - Field
privatepassword(string), hanya class itu sendiri yang dapat mengaksesnya - Field
protectedemail(string), class ini dan turunannya dapat mengaksesnya - Field
internaluserId(int), dapat diakses di dalam assembly yang sama
publicbernamaGetPublicInfo()yang mengembalikan"User: {Username}". Tambahkan methodpubliclain bernamaValidatePassword(string input)yang mengembalikantruejika input cocok dengan password private, danfalsejika tidak.- Property
AdminProfile.cs: Buat classAdminProfiledi namespaceSecurityyang mewarisiUserProfile. Class ini menunjukkan bagaimana memberprotecteddapat diakses di class turunan. Constructor harus menerima empat parameter yang sama dan meneruskannya ke constructor dasar. Tambahkan methodpublicbernamaGetAdminInfo()yang mengembalikan"Admin: {Username}, Email: {email}", perhatikan bahwa kamu dapat mengakses fieldemailyangprotecteddi sini!Program.cs: Di file utamamu, buatUserProfiledanAdminProfilemenggunakan nilai input. Tunjukkan tingkat aksesnya dengan memanggil method publik yang tersedia dan mengakses field internal secara langsung karena kamu berada di assembly yang sama. Tampilkan informasi yang dapat diungkapkan oleh setiap jenis pengguna.
Kamu akan menerima lima input:
- Nama pengguna
- Kata sandi
- ID pengguna (bilangan bulat)
- Percobaan kata sandi untuk divalidasi
Cetak output dalam format ini:
Regular User:
{GetPublicInfo() result}
Internal ID: {userId}
Password valid: {ValidatePassword result}
Admin User:
{GetAdminInfo() result}Misalnya, jika inputnya adalah alice, secret123, alice@email.com, 1001, dan secret123, outputnya akan seperti ini:
Regular User:
User: alice
Internal ID: 1001
Password valid: True
Admin User:
Admin: alice, Email: alice@email.comPerhatikan bahwa kata sandi tetap tersembunyi sepenuhnya. Kamu hanya dapat memvalidasinya, bukan mengambilnya. Email dilindungi, jadi hanya AdminProfile (class turunan) yang dapat menampilkannya. userId internal dapat diakses dari file utamamu karena berada di assembly yang sama. Inilah enkapsulasi!
Coba sendiri
using System;
using Security;
class Program
{
public static void Main(string[] args)
{
// Baca input
string username = Console.ReadLine();
string password = Console.ReadLine();
string email = Console.ReadLine();
int userId = Convert.ToInt32(Console.ReadLine());
string passwordAttempt = Console.ReadLine();
// TODO: Buat object UserProfile dengan nilai input
// TODO: Buat object AdminProfile dengan nilai input yang sama
// TODO: Cetak "Regular User:"
// TODO: Cetak hasil GetPublicInfo()
// TODO: Cetak "Internal ID: " lalu nilai field userId (dapat diakses karena berada dalam assembly yang sama)
// TODO: Cetak "Password valid: " lalu hasil ValidatePassword()
// TODO: Cetak "Admin User:"
// TODO: Cetak hasil GetAdminInfo()
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola CompositeLatihan sendiri: Compiler C# online