집 >백엔드 개발 >C#.Net 튜토리얼 >C#의 추상 클래스
추상이라는 단어는 자체적인 물리적 형태를 갖지 않지만 다른 것의 기반으로 작용하는 생각이나 아이디어를 의미합니다. 추상 클래스의 개념도 마찬가지입니다. 이번 글에서는 C#의 추상 클래스에 대해 설명하겠습니다. 추상 클래스는 인스턴스화할 수 없는 C#의 특수 클래스입니다. 즉, 추상 클래스의 개체를 만들 수 없습니다. 추상 클래스의 목적은 다른 클래스가 파생될 수 있는 골격 구조를 제공하는 것입니다. 추상 클래스에는 자체 구현이 없습니다. 개발자와 프로그래머는 추상 클래스에서 파생되어 골격 구조를 기반으로 구축, 즉 구현을 작성해야 합니다. 추상 클래스 내부에는 추상 메서드 선언이 있을 수도 있습니다. 다시 말하지만, 이러한 메소드에는 정의가 없습니다.
추상 클래스와 메소드를 선언하는 구문에는 선언 앞에 abstract 키워드를 배치하는 것이 포함됩니다. 아주 간단합니다.
구문:
abstract class ClassName { public abstract void MethodName(); }
추상 메소드에는 정의가 있을 수 없다는 점을 기억하세요. 따라서 추상 메서드 선언은 세미콜론으로 끝납니다. 선언만 가능합니다. 정의는 파생된 비추상 클래스에서 제공되어야 합니다.
추상 키워드는 클래스가 파생 클래스에서 구현될 기본 클래스 골격 구조임을 컴파일러에 지시합니다. 컴파일러가 추상 기본 클래스를 파생하는 클래스를 찾으면 모든 추상 메서드와 속성이 파생 클래스에서 재정의되고 구현되었는지 확인합니다.
이제 이 모든 것이 무엇인지, 인터페이스가 무엇을 하는지 궁금하실 것입니다. 그렇다면 추상 클래스는 인터페이스와 어떻게 다른가요?
예를 들어 이해해 보겠습니다. 우리가 출판사를 운영하고 있고 잡지에 칼럼을 쓰기 위해 몇 명의 편집자를 고용했다고 가정해 보겠습니다. 그들이 서로 다른 장르의 전문가이고, 특정 요일에 게재될 기사를 쓰고, 모두 같은 급여를 받고 있다고 가정해 보겠습니다.
편집자를 위한 추상 Employee 클래스를 정의해 보겠습니다.
코드:
abstract class EmployeeEditors { public abstract void Genre(); public abstract string PublishDay(); public int Payment() { Console.Write(“Monthly salary is {0}$.”, 1000); } }
결제 방법은 모두에게 동일하므로 쉽게 구현할 수 있었습니다. 다른 두 메서드는 파생 클래스에서 구현되도록 추상으로 선언되었습니다. 추상 클래스에서 파생된 각 편집기에 대해 일반 클래스를 선언한 다음 장르와 요일을 정의하는 추상 메서드를 구현할 수 있습니다. 이제 편집자마다 급여도 다르다고 가정해 보겠습니다. 코드를 변경하는 한 가지 방법은 결제 방법을 추상으로 선언하는 것입니다. 다른 방법은 전체 EmployeeEditor를 인터페이스로 선언하고 상속 클래스에 완전한 자유를 부여하는 것입니다.
Public interface EmployeeEditors { public abstract void Genre(); public abstract string PublishDay(); public abstract int Payment(); }
따라서 추상 클래스는 다른 클래스의 기반이 되는 기본 클래스입니다. 인터페이스는 다른 클래스가 처음부터 참조하고 구축할 수 있는 청사진입니다.
추상 클래스를 사용할 때 따라야 할 특정 규칙이 있습니다.
문제 설명: 또 다른 실제 예를 들어 보겠습니다. 특정 조직에 대한 제안서 생성 프로세스를 자동화하라는 요청을 받았다고 가정해 보겠습니다. 현재 프로세스는 완전히 수동이며 기존 제안서를 편집해야 하므로 오류가 발생하기 쉽습니다. 근무 위치, 근무 시간, 회사 직함, 회사 브랜딩 등과 같이 모든 제안서에 공통적으로 적용되는 특정 사항이 있습니다. 직원 이름, 직위, 급여, 입사 날짜 등과 같은 기타 사항은 각 제안서마다 다릅니다. 제안서.
해결책: 위의 목적에 맞게 추상 클래스를 디자인합니다. 방법을 살펴보겠습니다.
코드:
ode: using System; abstract class OfferLetter { public abstract string Name(string name); public abstract string Designation(string designation); public abstract int Payment(int pay); public abstract string DOJ(string doj); public string CompanyName() { return "XYZ Corporation Pvt. Ltd."; } public string OfficeAddress() { return "512, Manhattan, NY"; } public string CompanyBranding() { return this.CompanyName() + " is a privately owned regsitered corporation operating \n under the license provided by the state of New York."; } public string Disclaimer() { return "This letter and its contents are confidential in nature and are intended only \n for the recipient."+ "\nIf you are not the correct recipient, kindly return it immediately \n to " + this.CompanyName() + " " + this.OfficeAddress() + "."; } } class PrintOfferLetter : OfferLetter { public override string Name(string name) { return name; } public override string Designation(string designation) { return designation; } public override int Payment(int pay) { return pay; } public override string DOJ(string doj) { return doj; } } public class Program { public static void Main() { PrintOfferLetter ltr = new PrintOfferLetter(); string empName = "Mr. ABC", designation = "Senior Consultant", doj = "20-02-2020"; int pay = 50000; Console.WriteLine(ltr.CompanyName() + " is very happy to extend this offer letter to \n" + ltr.Name(empName) + " at the designation of " + ltr.Designation(designation) + " with an annual pay of " + ltr.Payment(pay) + "$."); Console.WriteLine("\nYou are required to report at " + ltr.OfficeAddress() + " from " + ltr.DOJ(doj) + " (dd-mm-yyyy)."); Console.WriteLine("\n\n" + ltr.CompanyBranding()); Console.WriteLine("\n\n" + ltr.Disclaimer()); } }
출력:
간단히 말해서 추상 클래스는 다른 클래스가 파생되어 그 위에 논리를 구축할 수 있는 불완전하거나 부분적으로 완전한 클래스입니다. 이 기사에서 우리는 추상 클래스가 어떻게 선언되고 작동하는지 살펴보았습니다. 우리는 추상 클래스의 사용과 인터페이스와의 차이점에 대한 실제 사례를 살펴보았습니다. 코드에서 가능한 한 추상 클래스를 많이 사용해 보는 것이 좋습니다. 이는 좋은 프로그래밍의 중요한 습관입니다.
위 내용은 C#의 추상 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!