0
C# 값 형식은 ByVal을 전송할 때 개체의 매개 변수로 사용할 때 ByValue를 전송하므로 ByRef가 전송됩니다. 그래서 내 질문은 : 더 나은 (빠른/더 performant/적은 메모리) 소요됩니다 무엇입니까?개체를 우회하는 가장 효율적인 방법 - byref 또는 반환 값
public void ChangeObjectByRef(MyObject mo)
{
mo.Name = "Test2";
mo.Values.Add("Value4");
}
public MyObject ChangeObjectReturnValue(MyObject mo)
{
mo.Name = "Test2";
mo.Values.Add("Value4");
return mo;
}
public void ChangeMyObject()
{
MyObject mo1 = new MyObject()
{
ID = 1,
Name = "Test",
Values = new List<string>(){
"Value1", "Value2", "Value3"
}
};
MyObject mo2 = new MyObject()
{
ID = 1,
Name = "Test",
Values = new List<string>(){
"Value1", "Value2", "Value3"
}
};
ChangeObjectByRef(mo1);
mo2 = ChangeObjectReturnValue(mo2);
Console.WriteLine(mo1.ToString());
Console.WriteLine(mo2.ToString());
}
public class MyObject
{
public int ID { get; set; }
public string Name { get; set; }
public List<string> Values { get; set; }
public override string ToString()
{
return string.Format("[ID={0}, Name={1}, Values={2}", ID, Name, string.Format("[{0}]", string.Join(", ", Values)));
}
}
결과는 (명백한) 동일합니다 :
당신에게 샘플을 제공합니다. 그러나이 두 가지 방법의 차이점은 무엇입니까?
'객체가 전송되는 반면 ByRef'No * 모든 * 값은 명시 적으로'ref '또는'out '으로 표시되지 않는 한 값으로 전달됩니다. 참조 유형의 값은 단순히 참조이며 이는 복사됩니다. 그것은 매우 다른 의미입니다. – Servy
성능 차이가 있는지 알고 싶으면 코드를 실행하고 직접 찾으십시오. – Servy
'ChangeObjectReturnValue'에'mo2'를 넘겨 주실 래요? 그렇지 않으면'mo1'의 업데이트 된 버전을'mo2'에 할당하고 여러분이 만든 두 번째'MyObject'를 잃어 버리는 것입니다. – juharr