일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- this 키워드
- 배열초기화
- 자동구현프로퍼티
- 무명형식
- is
- 튜플
- 인터페이스의 프로퍼티
- 일반화 클래스
- 컬렉션 초기화
- 인덱서
- 형식변환
- 프로퍼티
- 인터페이스 상속
- 클래스 연습문제
- 추상 프로퍼티
- 분할 클래스
- c#
- System.Array
- 이것이C#이다
- 프로퍼티와 생성자
- 오버라이딩
- 접근 한정자
- 클래스
- as
- base()
- 메소드숨기기
- 중첩클래스
- 인터페이스 예제
- 배열
- 가변배열
- Today
- Total
제로의영역
7.12 오버라이딩 봉인하기 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
(1) 정의: 메소드가 오버라이딩(재정의) 되지 않도록 하는 행위
(2) 용도
1) 자식 클래스에서 오버라이딩 했을 경우 오작동을 일으킬 수 있는 부모클래스의 메소드를 봉인할 때 사용.
2) 오버라이딩한 메소드는 파생 클래스의 파생 클래스에서도 자동으로 오버라이딩이 가능하기 때문에 virtual로 선언
된 메소드만 봉인하는 기능이 있음.
3) 봉인 메소드는 파생 클래스의 작성자를 위한 기반 클래스 작성자의 배려로 다음 상황을 막기위해 사용.
A. 파생클래스의 작성자가 기반 클래스로부터 상속받은 메소드 하나를 오버라이딩 한 경우, 이로 인해 파생클래스의
다른 부분들이 오작동을 하게 되는 경우.
(3) 사용법
1) virtual로 선언된 가상 메소드를 오버라이딩한 버전의 메소드만 가능(또 시작이네요. 이게 뭔소리인가요?)
>> 해석: 부모 클래스에서 virtual로 선언된 메소드를 오버라이딩한 자식클래스의 메소드에서만 가능(손자 클래스(?)등에서 오버라이딩하는 방지)
2) 자식 클래스의 오버라이딩한 메소드를 sealed로 수식
한정자+sealed+override+반환형식+메소드이름(변수)
예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ex7_13
{
class Parents
{
public virtual void SealMe() //오버라이드가 가능하도록 virtual로 수식
{
}
}
class Child:Parents //상속
{
public sealed override void SealMe() //오버라이드(재정의)하였지만 다른 상속자들이 사용할 수 없도록 sealed로 수식
{
base.SealMe(); //visual studio 2019에서 사용하니 자동으로 생성됨
}
}
class WantToOverrid:Child //자식클래스를 한번 더 상속
{
public override void SealMe() //오버라이드 시도
{
}
}
class MainProgram
{
static void Main(string[] args)
{
}
}
}
출력결과는 아래 에러가 표시되며 출력안됨
: 오류 CS0239 'WantToOverrid.SealMe()': 상속된 'Child.SealMe()' 멤버는 봉인되어 있으므로 재정의할 수 없습니다.
'C#' 카테고리의 다른 글
7.14 분할 클래스(Partial Class) (0) | 2019.06.10 |
---|---|
7.13 중첩 클래스 (0) | 2019.06.07 |
7.11 메소드 숨기기 (0) | 2019.06.05 |
7.10 오버라이딩과 다형성 (0) | 2019.06.03 |
7.9 기반 클래스와 파생 클래스 사이의 형식 변환, 그리고 is와 as 2. (0) | 2019.05.31 |