WPF로 프로그램을 만드는데 메모리 관련해서 잘모르겠엉.

void 함수1(ref  넘겨받은배열[,])
{
배열을 받는임시변수 = 넘겨받는배열;
임시변수 = new array[10,10]; //10,10짜리 배열만듦;
//이런저런 값들을 주고 화면에 버튼을 그림..버튼이 뜸
}
void 함수2(ref 넘겨받은변수)
{
//이런저런 값들을 줌
}


public button과int를가진_클래스[,] 배열;
public 문자,숫자를_가진_클래스  변수;
main()
{
void 함수1(ref 배열);
배열.button <-여기서 에러. 메모리 할당 안되어있고 아무런 값이 안들어있음 



변수 = new 문자,숫자를_가진_클래스();
void 함수2(ref 변수);
변수.string <-문제없이 함수2에서 처리한 문자와 숫자를 사용
}


음...함수1과 함수2의 차이는
1은 함수안에서 넘겨받은 자료를 메모리에 할당하고
2는 함수밖에서 먼저 할당하고 함수안으로 넘기고
이 차이같거든... c에서는 포인터를 넘기고 delete해줄때까지 문제가 없었는데...
c#은 메모리 할당 시점에 따라 지역변수 처럼 소멸되는건가?
c#이 쉬운거같으면서도 어려워.. 참조할만한 키워드나 단어라도좀 불러줘. 뭐라 검색해야할지 모르겠어. ㅠㅠ