Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 이것이C#이다
- c#
- is
- 무명형식
- 배열초기화
- base()
- 인덱서
- System.Array
- 분할 클래스
- 추상 프로퍼티
- 컬렉션 초기화
- 가변배열
- 오버라이딩
- 일반화 클래스
- 배열
- 중첩클래스
- 튜플
- 인터페이스 상속
- 접근 한정자
- this 키워드
- 자동구현프로퍼티
- 프로퍼티와 생성자
- 메소드숨기기
- 클래스 연습문제
- 프로퍼티
- 클래스
- 인터페이스의 프로퍼티
- as
- 형식변환
- 인터페이스 예제
Archives
- Today
- Total
제로의영역
9.7 추상 클래스와 프로퍼티(추상 프로퍼티) 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
1. 정의: 추상 클래스에 안에 있지만 인터페이스처럼 구현되지 않는 프로퍼티
2. 용도: 인터페이스의 추상클래스 처럼 다른 제작자가 프로퍼티의 추상 클래스를 사용할 때 강제적으로 추상클래스를 상속받아 재정의하여 사용하도록 하여 팀프로젝트나 다른 코드를 가져와 사용할 경우 혼선을 줄이는데 사용할 수 있도록 함.
3. 사용법: abstract 한정자를 이용하여 선언
abstruct class 추상 클래스이름
{
abstract 데이터형식 프로퍼티이름
{
get;
set;
}
}
추상 프로퍼티를 갖는 추상 클래스와 이를 상속하는 파생 클래스의 예제 코드)
abstract class Product
{
private static int serial=0;
public string SerialID // 추상클래스는 구현을 가진 프로퍼티를 가질 수 있음
{
get
{
return String.Format("{0:d5}", serial++);
}
}
abstract public DateTime ProductDate // 추상클래스는 구현이 없는 추상 프로퍼티를 가질 수 있음
{
get;
set;
}
}
class MyProduct : Product
{
public override DateTime ProductDate
// 파생클래스는 부모 추상 클래스의 모든 추상 메소드뿐 아니라 추상 프로퍼티를 재정의 해야 함
{
get;
set;
}
}
예제)
using System;
namespace ex8._12
{
abstract class Product
{
private static int serial = 0;
public string SerialID //구현을 가진 프로퍼티
{
get { return String.Format("{0:d5}", serial++); }
//다섯자리(0:d5)형식의 문자열과 Product의 변수 serial을 1 증가시킨 값을 반환 함.
}
abstract public DateTime ProductDate //구현을 가지지 않은 프로퍼티
{
get;
set;
}
}
class MyProduct:Product //추상 클래스 Product를 상속
{
public override DateTime ProductDate
// 파생클래스는 부모 추상 클래스의 추상 메소드와 추상 프로퍼티를 강제적으로 재정의 해주어야함
{
get;
set;
}
}
class MainProgram
{
static void Main(string[] args)
{
Product product_1 = new MyProduct()
{ ProductDate = new DateTime(2018, 1, 10) };
//ProductDate를 2018,1,10으로 초기화
Console.WriteLine("Product:{0}, Product Date:{1}",
product_1.SerialID, product_1.ProductDate);
Product product_2 = new MyProduct()
{ ProductDate = new DateTime(2018, 2, 3) };
Console.WriteLine("Product:{0},Product Date:{1}",
product_2.SerialID, product_2.ProductDate);
}
}
}
출력결과
Product:00000,Product Date:2018-01-10 오전 12:00:00
Product:00001,Product Date:2018-02-03 오전 12:00:00
'C#' 카테고리의 다른 글
10.2 배열을 초기화하는 세가지 방법(배열2) (0) | 2019.08.02 |
---|---|
10.1 All for one, one for all (배열) (0) | 2019.07.31 |
9.6 인터페이스의 프로퍼티 (0) | 2019.07.22 |
9.5 무명 형식(Anonymous Type) (0) | 2019.07.03 |
9.4 프로퍼티와 생성자 (0) | 2019.07.03 |