<멤버 접근의 예시>
Animal animal = new Animal();
// Animal = 클래스
// animal = 인스턴스
// new Animal(); = 멤버 접근 연산자(new 연산자)
<프로퍼티 사용예시>
public int age { get; set;}
//public = 공개수준
//int = 타입, 다른 타입도 가능하다
//age = 객체명
// { get; set;} = 접근자와 설정자, 접근자와 설정자 앞에 private을 선언하여 접근을 제한할 수 있다.
<readonly 사용예시>
private readonly int _age;
public 생성자(int s)
{
_age = s;
}
//위와 같이 생성자가 초기화할 수 있다.
<사용예시_1-1>
class Damage
{
public int _water;
public int _fire;
}
class Player
{
static void Main()
{
Damage gun = new Damage();
gun._water = 10;
gun._fire = 20;
Damage pick = gun;
pick._water = 20;
pick._fire = 30;
Console.WriteLine($"{gun._water}, {gun._fire}");
Console.WriteLine($"{pick._water}, {pick._fire}");
}
}
//output: 20,30과 20,30으로 출력된다.
-인스턴스로 생성한 pick은 Damage 클래스에 gun의 참조주소를 가져오기 때문에 pick은 gun으로 생성한 인스턴스와 같은 참조를 가르킨다.
결국 pick._water = gun._water으로 같은 객체로 인지하면된다.
※추가로 gun은 bob을 참조하고 있기때문에 gun에 대한 참조가 없어지므로 가비지 컬렉터가 수거한다.
변경된 값으로 고정되어야 하는 것이 아닌 매번 새로운 계산을 위하는것이라면, 메소드를 추가하여야 한다.
<사용예시_1-2>
Damage pick = Damage();
//위와 같이 메소드를 수정하는 경우 *output: 10,20과 20,30으로 출력된다.
<사용예시_1-1>에서 인스턴트를 수정한 내용이다.
위와 같이 메소드를 추가하는 경우 *output: 10,20과 20,30으로 출력된다.
하나의 클래스에서 같은 멤버를 호출하여 인스턴스의 값이 변경되는 경우 동일한 멤버를 호출한 정보가 다같이 변경이 된다면..? 클래스를 사용하는 이유가 급격하게 줄어들 것이다. 하.지.만 이를 방지 하는것이 this포인터 이다. 각 인스턴스를 독립시켜준다.