산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# 상속

C# 상속

이 자습서에서는 예제를 통해 C# 상속 및 해당 유형에 대해 알아봅니다.

C#에서 상속을 통해 기존 클래스에서 새 클래스를 만들 수 있습니다. 객체 지향 프로그래밍(OOP)의 핵심 기능입니다.

새 클래스가 생성되는 클래스를 기본 클래스(부모 또는 수퍼 클래스)라고 합니다. 그리고 새 클래스를 파생 클래스(자식 또는 하위 클래스)라고 합니다.

파생 클래스는 기본 클래스의 필드와 메서드를 상속합니다. 이것은 C#의 코드 재사용성에 도움이 됩니다.

<시간>

C#에서 상속을 수행하는 방법

C#에서는 :을 사용합니다. 상속을 수행하는 기호입니다. 예를 들어,

class Animal {  
  // fields and methods
} 

// Dog inherits from Animal
class Dog : Animal {
  // fields and methods of Animal 
  // fields and methods of Dog 
}

여기에서 파생 클래스 Dog를 상속합니다. 기본 클래스 동물에서 . 클래스는 이제 Animal의 필드와 메서드에 액세스할 수 있습니다. 클래스.<그림>

<시간>

예:C# 상속

using System;

namespace Inheritance {

  // base class
  class Animal { 

    public string name;

    public void display() {
      Console.WriteLine("I am an animal");
    }
    
  } 
  
  // derived class of Animal 
  class Dog : Animal {
    
    public void getName() {
      Console.WriteLine("My name is " + name);
    }
  }

  class Program {

    static void Main(string[] args) {

      // object of derived class
      Dog labrador = new Dog();

      // access field and method of base class
      labrador.name = "Rohu";
      labrador.display();

      // access method from own class
      labrador.getName();

      Console.ReadLine();
    }

  }
}

출력

I am an animal
My name is Rohu

위의 예에서 Dog 하위 클래스를 파생했습니다. 슈퍼클래스 동물에서 . 진술에 주목하십시오.

labrador.name = "Rohu";

labrador.getName();

여기에서는 labrador를 사용하고 있습니다. (Dog의 객체) name에 액세스 및 디스플레이() 동물 수업. 이는 파생 클래스가 기본 클래스의 모든 필드와 메서드를 상속하기 때문에 가능합니다.

또한 name에 액세스했습니다. Dog 메소드 내부의 필드 수업.

<시간>

관계와 관계

C#에서 상속은 is-관계입니다. 두 클래스 사이에 is-관계가 있는 경우에만 상속을 사용합니다. 예를 들어,

를 파생할 수 있습니다. 동물 수업. 마찬가지로 애플 과일 클래스 및 자동차 차량에서 수업.

<시간>

C# 상속에서 보호된 멤버

필드 또는 메소드를 protected로 선언할 때 , 동일한 클래스와 파생 클래스에서만 액세스할 수 있습니다.

예:상속의 보호된 구성원

using System;

namespace Inheritance {

  // base class
  class Animal { 
    protected void eat() {
      Console.WriteLine("I can eat");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {
     static void Main(string[] args) {

      Dog labrador = new Dog();

      // access protected method from base class
      labrador.eat();

      Console.ReadLine();
    }
  }
}

출력

I can eat

위의 예에서 Animal이라는 클래스를 만들었습니다. . 클래스에는 보호된 메서드 eat()가 포함되어 있습니다. .

우리는 Dog를 파생했습니다. 동물의 클래스 수업. 진술을 주목하십시오.

labrador.eat();

protected 이후 메서드는 파생 클래스에서 액세스할 수 있으며 eat()에 액세스할 수 있습니다. Dog의 메소드 수업.

<시간>

상속 유형

다음과 같은 유형의 상속이 있습니다.

1. 단일 상속

단일 상속에서 단일 파생 클래스는 단일 기본 클래스에서 상속됩니다.

<그림>

2. 다단계 상속

다단계 상속에서 파생 클래스는 기본에서 상속한 다음 동일한 파생 클래스가 다른 클래스의 기본 클래스 역할을 합니다.

<그림>

3. 계층적 상속

계층적 상속에서 여러 파생 클래스는 단일 기본 클래스에서 상속됩니다.

<그림>

4. 다중 상속

다중 상속에서 단일 파생 클래스는 여러 기본 클래스에서 상속됩니다. C#은 다중 상속을 지원하지 않습니다. 그러나 인터페이스를 통해 다중 상속을 달성할 수 있습니다.

<그림>

5. 하이브리드 상속

하이브리드 상속은 두 가지 이상의 상속 유형을 조합한 것입니다. 다단계 상속과 계층 상속의 조합은 하이브리드 상속의 한 예입니다.

<그림> <시간>

C# 상속의 메서드 재정의

기본 클래스와 파생 클래스 모두에 동일한 메서드가 있는 경우 파생 클래스의 메서드가 기본 클래스의 메서드를 재정의합니다. 이것을 C#에서는 메서드 재정의라고 합니다. 예를 들어,

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("I eat food");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {

      Console.WriteLine("I eat Dog food");
    }     
  }
  class Program {

    static void Main(string[] args) {
      // object of derived class
      Dog labrador = new Dog();

      // accesses overridden method
      labrador.eat();
    }
  }
}

출력

I eat Dog food

위의 예에서 eat() 메서드는 기본 클래스와 파생 클래스 모두에 있습니다.

eat()를 호출할 때 사용 개체 래브라도 ,

labrador.eat();

Dog 내부의 메소드 라고 합니다. 이는 Dog 내부의 메소드 때문입니다. Animal 내에서 동일한 메서드를 재정의합니다. .

virtual를 사용했습니다. 및 재정의 각각 기본 클래스와 파생 클래스의 메서드를 사용합니다. 여기,

<시간>

C# 상속의 기본 키워드

이전 예제에서 파생 클래스의 메서드가 기본 클래스의 메서드를 재정의하는 것을 보았습니다.

하지만 기본 클래스의 메서드도 호출하려면 어떻게 해야 하나요?

이 경우 base을 사용합니다. 파생 클래스에서 기본 클래스의 메서드를 호출하는 키워드입니다.

예:C# 상속의 기본 키워드

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("Animals eat food.");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {
      
      // call method from Animal class
      base.eat();
      
      Console.WriteLine("Dogs eat Dog food.");
    }     
  }
  class Program {

    static void Main(string[] args) {

      Dog labrador = new Dog();
      labrador.eat();
    }
  }
}

출력

Animals eat food.
Dogs eat Dog food.

위의 예에서 eat() 메소드는 기본 클래스 Animal 모두에 있습니다. 파생 클래스 Dog . 진술을 주목하십시오.

base.eat();

여기에서는 base을 사용했습니다. Animal 메소드에 접근하는 키워드 Dog의 클래스 수업.

<시간>

C#에서 상속의 중요성

상속의 중요성을 이해하기 위해 상황을 고려해 보겠습니다.

정사각형, 직사각형 등과 같은 정다각형으로 작업한다고 가정합니다. 그리고 입력을 기반으로 이 다각형의 둘레를 찾아야 합니다.

1. 둘레를 계산하는 공식은 모든 정다각형에 공통이므로 RegularPolygon을 만들 수 있습니다. 클래스 및 메소드 calculatePerimeter() 둘레를 계산합니다.

class RegularPolygon {

  calculatePerimeter() {
    // code to compute perimeter
  }
}

2. 그리고 Square 상속 및 사각형 RegularPolygon의 클래스 수업. 이러한 각 클래스에는 모든 다각형에 대해 다르기 때문에 길이와 변의 수를 저장하는 속성이 있습니다.

class Square : RegularPolygon {

  int  length = 0;
  int sides = 0;
}

length 값을 전달합니다. 및 측면 calculateperimeter() 둘레를 계산합니다.

이것이 상속을 통해 코드를 재사용 가능하고 직관적으로 만드는 방법입니다.

예:상속의 중요성

using System;

namespace Inheritance {

  class RegularPolygon {

      public void calculatePerimeter(int length, int sides) {

        int result = length * sides;
        Console.WriteLine("Perimeter: " + result);
      }
  }

  class Square : RegularPolygon {

    public int  length = 200;
    public int sides = 4;
    public void calculateArea() {

      int area = length * length;
      Console.WriteLine("Area of Square: " + area);
    }
  }

 class Rectangle : RegularPolygon {

    public int length = 100;
    public int breadth = 200;
    public int sides = 4;

    public void calculateArea() {
    
      int area = length * breadth;
      Console.WriteLine("Area of Rectangle: " + area);
    }
  }

  class Program {

    static void Main(string[] args) {

      Square s1 = new Square();
      s1.calculateArea();
      s1.calculatePerimeter(s1.length, s1.sides);
      

      Rectangle t1 = new Rectangle();
      t1.calculateArea();
      t1.calculatePerimeter(t1.length, t1.sides);
      
    }
  }
}     

출력

Area of Square: 40000
Perimeter: 800
Area of Rectangle: 20000
Perimeter: 400

위의 예에서는 RegularPolygon을 만들었습니다. 정다각형의 둘레를 계산하는 메소드가 있는 클래스입니다.

여기서 사각형사각형 RegularPolygon에서 상속 .

둘레를 계산하는 공식은 모두에게 공통적이므로 calculatePerimeter()를 재사용했습니다. 기본 클래스의 메서드입니다.

그리고 면적을 계산하는 공식이 모양마다 다르기 때문에 파생 클래스 내부에 면적을 계산하는 별도의 메소드를 만들었습니다.


C 언어

  1. C# 클래스 및 개체
  2. C# 액세스 수정자
  3. C# 정적 키워드
  4. C# 추상 클래스 및 메서드
  5. C# 중첩 클래스
  6. C# 부분 클래스 및 부분 메서드
  7. C# 봉인된 클래스 및 메서드
  8. C++의 다형성
  9. C++의 데이터 추상화
  10. C# - 프로그램 구조