추상화는 객체 지향 프로그래밍의 중요한 부분입니다. C#은 구현 세부 정보를 숨기고 사용자에게 필수 정보만 제공하는 프로세스인 추상화를 지원합니다. C#에서는 추상 클래스와 메서드를 사용하여 추상화를 달성할 수 있습니다.
다음은 추상 클래스와 관련된 몇 가지 중요한 사항입니다.
설명 구문:
아래 구문과 같이 abstract 키워드를 사용하여 추상 클래스와 메서드를 선언할 수 있습니다.
//abstract class abstract class class_name { //abstract method public abstract <return_type> method_name(); }
위 구문에서 추상 메서드에는 아무도 없는 것을 볼 수 있습니다. 파생 클래스는 추상 클래스의 추상 메서드 구현을 제공합니다. 상속받은 클래스를 통해 추상 클래스에 접근할 수 있습니다.
추상 클래스 외부에서는 추상 메서드를 선언할 수 없지만, 아래 구문과 같이 추상 클래스에는 비추상 메서드가 포함될 수 있습니다.
abstract class class_name { //abstract method public abstract <return_type> method_name(); //non-abstract method public <return_type> method_name() { //user code } }
때때로 사용자는 전체 하위 클래스에서 공유할 수 있는 일반화된 형식의 메서드 및 속성을 슈퍼클래스에 생성해야 하며, 이에 따라 메서드에 대한 구현을 제공함으로써 요구 사항에 따라 이러한 메서드 및 속성을 사용할 수 있습니다.
코드:
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); } } }
출력:
위의 예에서 추상 클래스 'Shape'에 정의된 두 메서드는 모두 추상 메서드입니다. 따라서 Shape는 순수 추상 기본 클래스이며 파생 클래스는 Shape 클래스의 두 메서드 모두에 대한 구현을 제공해야 합니다.
코드:
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(); } }
출력:
추상 클래스에는 아래 예와 같이 비추상 메서드도 포함될 수 있습니다.
코드:
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"); } } }
출력:
추상 클래스 및 메서드 외에도 아래 예와 같이 개인 액세스 한정자를 사용하여 C#에서 추상화를 달성할 수 있습니다.
코드:
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(); } } }
출력:
위의 예에서는 공개 메소드는 다른 클래스에서 액세스할 수 있지만 다른 클래스에서는 비공개 메소드를 호출할 수 없음을 보여줍니다. 따라서 필요한 정보만 제공하고 다른 세부 정보를 숨겨 추상화를 달성하는 데 도움이 됩니다.
객체 지향 프로그래밍의 추상화는 구현 세부 정보를 숨기고 사용자에게 필요한 정보만 제공하여 보안을 제공합니다. 우리는 추상 메소드의 도움으로 구현 세부사항을 숨길 수 있는 추상 클래스를 사용합니다. 인터페이스를 사용하여 추상화를 구현할 수도 있습니다.
위 내용은 C#의 추상화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!