Abstraksi dalam C#

WBOY
WBOYasal
2024-09-03 15:19:45330semak imbas

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:

  • Kita boleh mentakrifkan kelas dan kaedah abstrak dengan memberi awalan pada nama kelas dan nama kaedah dengan abstrak kata kunci.
  • Kami tidak boleh mencipta objek kelas abstrak.
  • Kelas abstrak boleh mengandungi kaedah abstrak dan bukan abstrak.
  • Kelas abstrak tidak boleh diisytiharkan sebagai kelas tertutup.

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
}
}

Contoh Abstraksi dalam C#

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.

Contoh #1

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:

Abstraksi dalam C#

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.

Contoh #2

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:

Abstraksi dalam C#

Contoh #3

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:

Abstraksi dalam C#

Contoh #4

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:

Abstraksi dalam C#

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.

Kesimpulan – Abstraksi dalam C#

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:MVVM C#Artikel seterusnya:MVVM C#