본문 바로가기

C# 공부/C# 기본 문법

프로퍼티 - 2 (인터페이스의 프로퍼티, 추상 프로퍼티)

A. 인터페이스의 프로퍼티

인터페이스는 메소드 뿐만아니라 프로퍼티와 인덱서도 가질수 있다. 마찬가지로 파생클래스에서는 필수적으로 구현이 되어야한다.

인터페이스의 프로퍼티 선언은 클래스의 자동구현 프로퍼티 선언과 모습이 동일하다는 점만 주의해서 사용.

interface INamedValue
{
    string Name{get;set;}
    string Value{get;set;}
}

class NamedValue : INamedValue //인터페이스를 상속하므로 반드시 Name과 Value를 구현해야하며, 자동구현프로퍼티를 사용해도된다.
{
    public string Name{get;set;}
    public string Value{get;set;}
}

 

B. 추상클래스와 프로퍼티

추상클래스는 구현된 프로퍼티와 추상프로퍼티 모두를 가질수있다.

abstract class Product
{
    public 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;} 
    //파생클래스는 부모 추상클래스의 모든 추상메소드 및 추상프로퍼티를 재정의해야한다.
}

static void Main(String[] args)
{
    Product product_1 = new MyProduct()
    {ProductDate = new DateTime(2018,1,10)};
    
    Console.WriteLine($"{product_1.SerialID},{product_1.ProductDate}");
}