프로퍼티

최태선·2022년 3월 8일
0

이것이 C#이다

목록 보기
3/10

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; }
}
profile
최태선입니다

0개의 댓글