본문 바로가기
C# 공부

property

by Dev_Hugh 2021. 8. 25.
728x90
반응형

Study about property

  • 은닉성과 편의성을 모두 잡는 방법
  • Get/Set 접근자, value 사용
class MyClass
{
    private int myField;
    public int MyField
    {
        get
        {
            return myField;
        }
        set
        {
            myField = value;
        }
    }
}
  • 읽기전용 프로퍼티는 Get 접근자만 구현하기!

자동 구현 프로프티

public class NameCard
{
    private string name;
    private string phoneNumber;

    /* public string Name
    {
        get { return name; }
        set { name = value; }
    } */

    public string Name
    {
        get; set;
    }

    public string PhoneNumber
    {
        get; set;
    }

    // 선언과 동시에 초기화
    public string Name{ get; set; } = "Unknown";
    public string PhoneNumber { get; set; } = "000-0000";
}
  • 단순히 필드를 읽고 쓰기만 하는 경우 get/set만 해준다.

직접 선언한 프로퍼티 vs 자동 구현 프로퍼티

  • 자동 구현 프로퍼티에는 컴파일러가 자동 선언 형식으로 <필드명>k_BackingField를 앞에 붙인다.

프로퍼티와 생성자

class BirthdayInfo
{
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
    public int Age
    {
        get
        {
            return new DateTime(DateTime.Now.Subtract(Birthday).Ticks).Year;
        }
    }
}
static void Main()
{
    BirthdayInfo birth = new BirthdayInfo()
    {
        Name = "Hugh",
        Birthday = new DateTime(1999,1,01)
    };
}
  • 객체 생성시 프로퍼티를 이용한 필드 초기화
  • 필요한 프로퍼티만 초기화 가능

무명 형식 프로퍼티

static void Main()
{
    var myInstance = new {Name = "Hugh", Age = "23" };
    Console.WirteLine(myInstance.Name, myInstance.Age);
}
  • 형식의 선언과 동시에 인스턴스 할당
  • 인스턴스를 만들고 다시는 사용하지 않을때 이용
  • 프로퍼티에 할당된 값은 변경 불가

인터페이스의 프로퍼티

interface IProduct
{
    string ProductName { get; set; }
}
class Product : IProduct
{
    private string productName;
    public string ProductName
    {
        get { return productName; }
        set { productName = value; }
    }
}
  • 인터페이스의 프로퍼티 선언과 클래스의 자동 구현 프로퍼티 선언이 동일
  • 자식 클래스에서 부모 인터페이스의 프로퍼티를 모두 구현해야 한다.

추상 클래스와 프로퍼티

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; }
}
  • 구현된 프로퍼티와 구현되지 않은 프로퍼티 모두 가능하다.
  • 구현되지 않은 프로퍼티는 abstract 한정자 사용하여 구현을 필수화 시킨다.
  • 파생클래스는 부모 추상 클래스의 모든 추상 메소드뿐만 아니라 추상 프로퍼티도 재정의 해야한다.
728x90
반응형

'C# 공부' 카테고리의 다른 글

lambda  (0) 2021.08.26
dynamic  (0) 2021.08.26
generic  (0) 2021.08.25
exception  (0) 2021.08.25
interface  (0) 2021.08.25