C#에서 ref와 out

현재 페이지를 로딩중입니다.
만약 페이지 로딩이 끝났는데 본문이 보이지 않는다면
광고차단 플러그인 때문이니 잠시 플러그인을 꺼주시면 감사하겠습니다.

The current page is loading.
If the page loading is over but the text is not visible
This is because of the ad blocking plugin, so please be sure to turn off the plugin for a while.

C#책을 읽다보니 Value 타입이랑 reference 타입있는데
뭐 C++에도 있는거지만 암튼 읽다보니 이런게 있더군.

참조형식이 ref를 쓰면 C++에서 &붙이는거랑 비슷하다

class anotherclass{
	public:
	int id1;
	int id2;
	anotherclass() { id1 = 5; id2 = 7; }
	
	void GetID(int &ID1, int &ID2){
		ID1 = id1;
		ID2 = id2;
	}
}

void Main(){
	anotherclass ac;
	int aaa = 0;
	int bbb = 0;
	ac.GetID(aaa, bbb);
	Console.WriteLine("aaa={0}, bbb={1}",aaa,bbb);
}

위는 대충 작성한 C++코드이고 밑에는 이걸 동일효과가 나는 C#코드

class anotherclass{
	public int id1;
	public int id2;

	public anotherclass() { id1 = 5; id2 = 7; }
	public void GetID(ref int ID1, ref int ID2){
		ID1 = id1;
		ID2 = id2;
	}
}

namespace _12
{
	class Program{
		static void Main(string[] args){
			anotherclass ac = new anotherclass();
			int aaa = 0;
			int bbb = 0;
			ac.GetID(ref aaa,ref bbb);
			Console.WriteLine("aaa={0}, bbb={1}",aaa,bbb);
		}
	}
}

ref가 들어가면 거기에 물리는 객체(aaa나 bbb)는 이미 인스턴스화 되어 있어야 하고
out을 쓰면 단순 C++표현으로 하면 포인터 값만 넣어주는것이라 그 메소드 내부에서
new 해서 인스턴스화 한담에 그 객체를 반환하는것이다.

ref는 사용하기전에 인스턴스화 까지 되어 있어야 하며
out은 단순 포인터 값만 넣으면 내부에서 인스턴스화 해서 값을 반환한다.

out을 쓰면 위의 예제가 이렇게 변한다.

class anotherclass{
	public int id1;
	public int id2;

	public anotherclass() { id1 = 5; id2 = 7; }
	public void GetID(out int ID1, out int ID2){
		//ID1, ID2가 만일 클래스 타입이었다면 new를 해줘야 한다.
		ID1 = id1;
		ID2 = id2;
	}
}

namespace _12
{
	class Program{
		static void Main(string[] args){
			anotherclass ac = new anotherclass();
			int aaa, bbb;
			ac.GetID(out aaa,out bbb);
			Console.WriteLine("aaa={0}, bbb={1}",aaa,bbb);
		}
	}
}

허겁지겁 대충 속독법으로 보고 있는 C#책이라.. 혹시 잘못이해한게 있으면 댓글 부탁드립니다.

크리에이티브 커먼즈 라이선스 Linsoo의 저작물인 이 저작물은(는)크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.