C# - 상속

인간과 마찬가지로 코드 코드 클래스와 구조체는 다른 클래스로부터 상속받을 수 있습니다. 인간인 우리가 부모로부터 특성과 특성을 물려받는 것처럼 계급도 마찬가지입니다.

우리는 눈 색깔, 피부색, 머리 색깔, 유전적 과민증 및 알레르기를 유전받을 수 있습니다.

이것은 코딩에서도 같은 방식으로 작동할 수 있습니다. 상속받을 부모 클래스 또는 구조체를 제공할 수 있습니다.

상속은 어떻게 작동합니까



글쎄, 특정 항목만 상속되는 인간 부모와 달리 코드에서 우리는 속성, 메서드 및 수정자로부터 모든 부모의 특성과 특성을 상속합니다.

은행을 예로 들어보자. 이것은 하나의 예이지만 이상적인 실생활 사용은 아니며 단지 상속의 예에 불과하다는 점을 지적해야 합니다.

public class Bank
{
        public int Id { get; set; }
        public string Name { get; set; }
        public string SortCode { get; set; }

        public void PaySomone(string accountNumber, string sortCode)
        {
            //some logic to pay the account number and sort code
            Console.WriteLine($"Paid {accountNumber} and {sortCode}");
        }
    }


자, 우리는 은행을 가지고 있지만 온라인 전용 은행이나 실제 은행과 같이 여러 유형의 은행이 있을 수 있습니다.

이제 일반적으로 다음과 같이 작성합니다.

public class OnlineBank
{
        public int Id { get; set; }
        public string Name { get; set; }
        public string SortCode { get; set; }
        public string BankHomePage { get; set; }

        public void PaySomeone(string accountNumber, string sortCode)
        {
            //some logic to pay the account number and sort code
            Console.WriteLine($"Paid {accountNumber} and {sortCode}");
        }
}


이것은 잘못된 방법입니다. 다음에 PhysicalBank 클래스를 만들 때 보게 될 것입니다.

public class PhysicalBank
{
        public int Id { get; set; }
        public string Name { get; set; }
        public string SortCode { get; set; }
        public string BankAddress { get; set; }

        public void PaySomone(string accountNumber, string sortCode)
        {
            //some logic to pay the account number and sort code
            Console.WriteLine($"Paid {accountNumber} and {sortCode}");
        }
}


코드에서 냄새가 나는 이유를 알 수 있습니까? D.R.Y 원칙(Don't Repeat Yourself)을 따르지 않습니다. 두 클래스에 동일한 코드가 있으며 여러 속성, 메서드 및 논리를 공유할 필요가 없습니다.

상속을 사용하여 이 문제를 해결할 수 있습니다.

상속 수정



공통 논리를 포함하는 상속된 클래스를 활용하도록 OnlineBank 및 PhysicalBank를 재구성할 수 있습니다.

먼저 다음과 같이 기본 클래스를 만듭니다.

public class Bank
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string SortCode { get; set; }

        public void PaySomeone(string accountNumber, string sortCode)
        {
            //some logic to pay the account number and sort code
            Console.WriteLine($"Paid {accountNumber} and {sortCode}");
        }
    }


그래서 여기에 모든 은행이 가질 몇 가지 속성과 방법이 있습니다.

이제 "{classname} : {classname}"구문을 사용하여 OnlineBank 클래스에 대해 이것을 상속할 수 있습니다. : 문자를 사용하여 이 클래스가 이 클래스에서 상속할 코드를 알려줍니다.

이제 이것을 OnlineBank 클래스에 적용하고 일부 OnlineBank 특정 속성을 추가할 수 있습니다.

public class OnlineBank : Bank {

    public string BankHomePage {get;set;}
}

public class PhysicalBank : Bank {

   public string BankAddress {get;set;}
}


이제 하위 클래스에는 온라인 및 실제 은행 전용 속성이 포함되어 있지만 상위 속성 및 메서드에도 액세스할 수 있습니다. 콘솔 애플리케이션에서 다음 코드를 실행하여 이를 테스트할 수 있습니다.

using System;

namespace Bank
{
    internal class Program
    {
        private static void Main(string[] args)
        {

            Console.WriteLine("Beginning Bank Transaction...");
            var onlineBank = new OnlineBank();
            onlineBank.PaySomeone("012345898", "01-01-01");

            var physicalBank = new PhysicalBank();
            onlineBank.PaySomeone("987654321", "10-10-10");

            Console.ReadLine();
        }

    }

    public class Bank
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string SortCode { get; set; }

        public void PaySomeone(string accountNumber, string sortCode)
        {
            //some logic to pay the account number and sort code
            Console.WriteLine($"Paid {accountNumber} & {sortCode}");
        }
    }

    public class OnlineBank : Bank
    {
        public string BankHomePage { get; set; }
    }

    public class PhysicalBank : Bank
    {
        public string BankAddress { get; set; }
    }
}


여기에서 이제 각 Bank 하위 클래스 내에서 선언하지 않고도 두 클래스 내에서 PaySomeone() 메서드에 액세스하고 이 기능을 다시 사용할 수 있음을 알 수 있습니다. 그것이 상속의 기본입니다.

이 기본 형태의 상속은 간단하고 유용하지만 유연하지 않거나 재사용성 및 확장성 측면에서 많은 것을 제공하지만, 예를 들어 돈으로 지불하는 것과 같이 둘 다 할 수 있지만 다른 방식으로 수행할 수 있는 다른 많은 기능을 지시하고 싶었다고 가정해 보겠습니다. 또는 수표를 현금화하십시오. 여기서 인터페이스와 추상 클래스가 작동합니다.

이 시리즈의 다음 장에서는 인터페이스와 상속에서 인터페이스를 사용하는 방법을 살펴보겠습니다.

좋은 웹페이지 즐겨찾기