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
반응형