Rumah >pembangunan bahagian belakang >Tutorial C#.Net >Abstraksi dalam C#
Abstraksi ialah bahagian penting dalam Pengaturcaraan Berorientasikan Objek. C# menyokong abstraksi, satu proses menyembunyikan butiran pelaksanaan dan hanya menyediakan maklumat penting kepada pengguna. Dalam C# kita boleh mencapai abstraksi dengan bantuan kelas dan kaedah abstrak.
Berikut ialah beberapa perkara penting berkenaan kelas abstrak:
Sintaks dengan Penjelasan:
Kami boleh mengisytiharkan kelas dan kaedah abstrak dengan bantuan kata kunci abstrak, seperti yang ditunjukkan dalam sintaks di bawah:
//abstract class abstract class class_name { //abstract method public abstract <return_type> method_name(); }
Dalam sintaks di atas, kita dapat melihat bahawa kaedah abstrak tidak mempunyai sesiapa. Kelas terbitan menyediakan pelaksanaan kaedah abstrak bagi kelas abstrak. Kita boleh mengakses kelas abstrak mengikut kelas yang diwarisi daripadanya.
Kami tidak boleh mengisytiharkan kaedah abstrak di luar kelas abstrak, tetapi kelas abstrak boleh mengandungi kaedah bukan abstrak, seperti yang ditunjukkan dalam sintaks di bawah:
abstract class class_name { //abstract method public abstract <return_type> method_name(); //non-abstract method public <return_type> method_name() { //user code } }
Kadangkala pengguna perlu mencipta bentuk umum kaedah dan sifat dalam kelas super yang boleh dikongsi oleh keseluruhan subkelasnya, yang boleh menggunakan kaedah dan sifat ini mengikut keperluannya dengan menyediakan pelaksanaan kepada kaedah sewajarnya.
Kod:
using System; namespace abstraction { //abstract class abstract class Shape { //abstract methods public abstract double calculateArea(); public abstract void displayDetails(double area); } //Rectangle class inheriting Shape class class Rectangle : Shape { //private data members private double length; private double breadth; public Rectangle(double length, double breadth) { this.length = length; this.breadth = breadth; } //overriding abstract methods of Shape class using 'override' keyword public override double calculateArea() { return (length * breadth); } public override void displayDetails(double area) { Console.Write("Length of rectangle: "+length); Console.Write("\nBreadth of rectangle: "+breadth); Console.Write("\nArea of rectangle: "+area); } } //Square class inheriting Shape class class Square : Shape{ //private data members private double side; public Square(double side) { this.side = side; } //overriding abstract methods of Shape class using 'override' keyword public override double calculateArea() { return (side * side); } public override void displayDetails(double area) { Console.Write("Length of a side of square: "+side); Console.Write("\nArea of square: "+area); } } public class AbstractionDemo { public static void Main(string[] args) { double area; //creating reference of Shape class using Rectangle class Shape shapeRec = new Rectangle(5,6); area = shapeRec.calculateArea(); shapeRec.displayDetails(area); Console.WriteLine("\n"); //creating reference of Shape class using Square class Shape shapeSquare = new Square(4); area = shapeSquare.calculateArea(); shapeSquare.displayDetails(area); } } }
Output:
Dalam contoh di atas, kedua-dua kaedah yang ditakrifkan di bawah kelas abstrak 'Bentuk' ialah kaedah abstrak. Oleh itu, Shape ialah kelas asas abstrak tulen dan kelas terbitan mesti menyediakan pelaksanaan untuk kedua-dua kaedah kelas Shape.
Kod:
using System; abstract class Mobile { public abstract void mobileDetails(); } class Apple : Mobile { public override void mobileDetails() { Console.WriteLine("Model: IphoneX"); Console.WriteLine("Screen size: 5.8 inch"); Console.WriteLine("Processor: A11 Bionic Processor"); } } class Motorola : Mobile { public override void mobileDetails() { Console.WriteLine("Model: G5 plus"); Console.WriteLine("Screen size: 5.2 inch"); Console.WriteLine("Processor: octa-core Snapdragon"); } } public class AbstractionDemo { public static void Main(string[] args) { Mobile mobileApple = new Apple(); mobileApple.mobileDetails(); Console.WriteLine(""); Mobile mobileMoto = new Motorola(); mobileMoto.mobileDetails(); } }
Output:
Kelas abstrak juga boleh mengandungi kaedah bukan abstrak, seperti yang ditunjukkan dalam contoh di bawah.
Kod:
using System; namespace abstraction { abstract class Birds { //abstract method public abstract void birdDetails(); //non-abstract method public void canFly(bool canFly, string name) { if(canFly) Console.WriteLine(name+" can fly"); else Console.WriteLine(name+" cannot fly"); } } class Parrot : Birds { public override void birdDetails() { Console.WriteLine("Parrots have different colours and size"); } } class Ostrich : Birds { public override void birdDetails() { Console.WriteLine("Ostrich is the largest living bird"); } } public class AbstractionDemo { public static void Main(string[] args) { Birds birdParrot = new Parrot(); birdParrot.birdDetails(); birdParrot.canFly(true, "Parrot"); Console.WriteLine(""); Birds birdOstrich = new Ostrich(); birdOstrich.birdDetails(); birdOstrich.canFly(false, "Ostrich"); } } }
Output:
Selain daripada kelas dan kaedah abstrak, kami boleh mencapai abstraksi dalam C# menggunakan pengubah suai akses peribadi seperti yang ditunjukkan dalam contoh di bawah.
Kod:
using System; namespace abstraction { public class Bank { private string name; private string branch; private string ifscCode; public string Name { get { return name; } set { name = value; } } public string Branch { get { return branch; } set { branch = value; } } public string IfscCode { get { return ifscCode; } set { ifscCode = value; } } public void bankDetails() { Console.WriteLine("Bank name: " + Name); Console.WriteLine("Branch name: " + Branch); Console.WriteLine("IFSC code: " + IfscCode); } public void bankAddress() { Console.WriteLine("Address: Andheri, Mumbai"); } private void numberOfAccounts() { Console.WriteLine("Account Information"); } private void numberOfLockers() { Console.WriteLine("Locker Information"); } } public class AbstractionDemo { public static void Main(string[] args) { Bank bank = new Bank(); bank.Name = "ABC"; bank.Branch = "XYZ"; bank.IfscCode = "ABC123"; bank.bankDetails(); bank.bankAddress(); //Error -'Bank.numberOfAccounts()' is inaccessible due to its protection level //bank.numberOfAccounts(); //Error - 'Bank.numberOfLockers()' is inaccessible due to its protection level //bank.numberOfLockers(); } } }
Output:
Contoh di atas menunjukkan bahawa kaedah awam boleh diakses daripada kelas lain, tetapi kami tidak boleh memanggil kaedah persendirian daripada kelas lain. Oleh itu, ia membantu mencapai abstraksi dengan menyediakan satu-satunya maklumat yang diperlukan dan menyembunyikan butiran lain.
Abstraksi dalam Pengaturcaraan Berorientasikan Objek menyediakan keselamatan dengan menyembunyikan butiran pelaksanaan dan hanya menyediakan maklumat yang diperlukan kepada pengguna. Kami menggunakan kelas abstrak di mana, dengan bantuan kaedah abstrak, kami boleh menyembunyikan butiran pelaksanaan. Abstraksi juga boleh dicapai menggunakan Antara Muka.
Atas ialah kandungan terperinci Abstraksi dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!