728x90
C# 키워드인 ref는 해당 타입 객체가 호출되는 메소드에서 변경될 수 있다는 것을 의미한다.
1. Value 타입 객체의 값을 변경하려고 할 경우
public void RunTest()
{
int a = 10;
int b = 20;
int c = 30;
bool success = Sum(a, b, ref c);
Console.WriteLine(c);
}
public bool Sum(int a, int b, ref int sum)
{
sum += a + b;
return true;
}
2. Reference 타입 객체를 새로운 레퍼런스 객체로 할당할 경우
- Reference 타입 객체는 Heap 영역의 포인터만 전달하기 때문에 ref를 사용하지 않아도 해당 객체의 property나 객체 내용을 변경할 수 있다.
public void Run()
{
DataSet ds = new DataSet();
AddTable(ds);
Console.WriteLine(ds.Tables.Count); // 1
}
public void AddTable(DataSet ds)
{
DataTable dt = new DataTable("Table1");
dt.Columns.Add("ColA", typeof(string));
ds.Tables.Add(dt);
}
- Reference 타입 객체를 파라미터로 전달하면서 ref를 사용하는 경우는, 다른 새로운 Reference 객체를 해당 파라미터에 할당하려고 하는 경우이다. 아래 코드에서 AddTable 메서드 호출할 때 ref 키워드가 없으면 메서드 호출 이전의 ds를 그대로 유지하게 된다. 따라서 출력은 1이 아닌 0이 된다.
public void Run()
{
DataSet ds = new DataSet();
AddTable(ref ds);
Console.WriteLine(ds.Tables.Count); // 1
}
public void AddTable(ref DataSet ds)
{
DataSet newDs = new DataSet();
DataTable dt = new DataTable("Table1");
dt.Columns.Add("ColA", typeof(string));
newDs.Tables.Add(dt);
ds = newDs;
}
728x90
'C#' 카테고리의 다른 글
C# Winform 디자이너가 정상적으로 로딩되지 않을 경우, 체크 사항 및 해결 방안 (0) | 2022.12.01 |
---|---|
단일 프로세스 실행 (0) | 2022.11.30 |
대용량 리스트를 처리하면서 느낀 점 (0) | 2022.11.30 |
[DevExpress] GridControl DataSource에 대용량 데이터 세팅할 시, 느린 이슈 해결하는 방법 (0) | 2022.11.30 |
IEnumerable 리스트를 Linq를 사용 안 하고 빠르게 List로 변환하는 방법 (0) | 2022.11.30 |