C#의 추상화

WBOY
풀어 주다: 2024-09-03 15:19:45
원래의
309명이 탐색했습니다.

추상화는 객체 지향 프로그래밍의 중요한 부분입니다. C#은 구현 세부 정보를 숨기고 사용자에게 필수 정보만 제공하는 프로세스인 추상화를 지원합니다. C#에서는 추상 클래스와 메서드를 사용하여 추상화를 달성할 수 있습니다.

다음은 추상 클래스와 관련된 몇 가지 중요한 사항입니다.

  • 클래스 이름과 메서드 이름 앞에 abstract 키워드를 붙여 추상 클래스와 메서드를 정의할 수 있습니다.
  • 추상 클래스의 객체는 생성할 수 없습니다.
  • 추상 클래스에는 추상 메서드와 비추상 메서드가 포함될 수 있습니다.
  • 추상 클래스는 봉인 클래스로 선언할 수 없습니다.

설명 구문:

아래 구문과 같이 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
}
}
로그인 후 복사

C#의 추상화 예

때때로 사용자는 전체 하위 클래스에서 공유할 수 있는 일반화된 형식의 메서드 및 속성을 슈퍼클래스에 생성해야 하며, 이에 따라 메서드에 대한 구현을 제공함으로써 요구 사항에 따라 이러한 메서드 및 속성을 사용할 수 있습니다.

예시 #1

코드:

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);
}
}
}
로그인 후 복사

출력:

C#의 추상화

위의 예에서 추상 클래스 'Shape'에 정의된 두 메서드는 모두 추상 메서드입니다. 따라서 Shape는 순수 추상 기본 클래스이며 파생 클래스는 Shape 클래스의 두 메서드 모두에 대한 구현을 제공해야 합니다.

예시 #2

코드:

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();
}
}
로그인 후 복사

출력:

C#의 추상화

예시 #3

추상 클래스에는 아래 예와 같이 비추상 메서드도 포함될 수 있습니다.

코드:

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#의 추상화

예시 #4

추상 클래스 및 메서드 외에도 아래 예와 같이 개인 액세스 한정자를 사용하여 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#의 추상화

위의 예에서는 공개 메소드는 다른 클래스에서 액세스할 수 있지만 다른 클래스에서는 비공개 메소드를 호출할 수 없음을 보여줍니다. 따라서 필요한 정보만 제공하고 다른 세부 정보를 숨겨 추상화를 달성하는 데 도움이 됩니다.

결론 – C#의 추상화

객체 지향 프로그래밍의 추상화는 구현 세부 정보를 숨기고 사용자에게 필요한 정보만 제공하여 보안을 제공합니다. 우리는 추상 메소드의 도움으로 구현 세부사항을 숨길 수 있는 추상 클래스를 사용합니다. 인터페이스를 사용하여 추상화를 구현할 수도 있습니다.

위 내용은 C#의 추상화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿