1. 프로퍼티의 선언
class MyClass
{
private int myField
public int myField
{
get
{
return myField;
}
set
{
myField = value;
}
}
}
MyClass obj = new MyClass();
obj.MyField =3;
Console.WriteLine(obj.MyField);
- set을 구현하기 싫으면 set을 생성하지 않으면 됨.
but 신중해야한다. -> 코드 관리가 힘들어질 수 있음.
2. 자동구현 프로퍼티
public class NameCard
{
public string Name { get; set; }
public string PhoneNumber { get; set;} = " 000-0000 " // 생성 동시에 초기화 가능
}
3. 프로퍼티를 이용한 생성
BirthdayInfo birth = new BirthdayInfo()
{
Name = "서현", // 컴마임에 주의
Birthday = new DateTime(1991,6,28)
};
4. 초기화전용 자동구현 프로퍼티 - init을 활용하면 초기화할때만 지정가능하고 변경 불가능
public class Transaction
{
public string From { get; init; }
}
5. 레코드 선언 - 레코드란 불변한 객체이다. 레코드를이용하면 참조형식의 비용효율과 값형식이 주는 편리함을 모두 제공한다. Equal() 메서드가 자동 생성된다.
record Rtransaction
{
public string From { get; init; }
}
Rtransaction tr1 = new Rtransaction{From="Alice", To="Bob", Amount = 100};
Rtransaction tr2 = with tr1 {To="Charlie"}; // To만 찰리로 바꿈
- with를 사용하면 깊은복사를 진행할 수 있다. 이때 프로퍼티 값 변경도 가능
6. Equals() -> record일때 자동생성되며 깊은 비교가능
tr1.Equals(tr2) // False : To를 찰리로 바꿔서
7. 무명형식 - 인스턴스를 만들고 난 후에는 읽기만 가능. LINQ와 함께 사용하면 좋음
var myInstance = new {Name ="최태선", Age = "26"};
Console.WriteLine( myInstance.Name , myInstance.Age );
8. 인터페이스도 프로퍼티 선언이 가능하다. 구현은 불가하지만 선언 형식이 클래스의 자동구현 프로퍼티 선언과 동일하다.
9. 추상프로퍼티는 구현된 프로퍼티와 구현되지 않은 프로퍼티를 둘다 가질 수 있는데, 구현되지 않은 프로퍼티를 생성하기 위해서는 자동구현과 다르게 하기 위해 abstract 한정자를 사용해야한다.
abstract class Product
{
public string serialID { get { return String.Format("{0:d5}",serial++);
abstract public DateTime ProductDate { get; set; }
}