2009-10-20 5 views
1

참조 된 객체를 직접 변경하는 내 메소드 내에서 객체에 대한 참조를 전달할 수있는 방법이 있습니까?참조 된 객체 조작

예를 들어, 내 메소드에 드롭 다운리스트를 전달하고 조작하고 완료하고 싶습니다. 이 메소드는 모든 드롭 다운 목록을 사용합니다.

public static void MyMethod(Dropdownlist list1, ref DropdownList list2) 
{ 
    // just manipulate the dropdown here... no need to returnit. Just Add or remove some values from the list2 
} 

분명히 list2에 dropdownlist 객체를 전달할 수 없습니다. 그러면 어떻게해야합니까? 목록에서 일부 값을 제거 할 것입니다. 그리고 이것은 좋은 유틸리티 메소드가 될 것이므로이 코드를 반복해서 반복하지 않아도 메소드에서 수행 할이 기능을 수행 할 수 있습니다.

+0

이것을 기억하는 방법은 실제로 "ref"또는 "out"매개 변수는 * object *에 대한 참조가 아닌 * variable *에 대한 참조입니다. 즉, M (ref int y) 메서드가 있고 M (ref x)이라고 할 때, "y는 이제 변수 x에 대한 별칭"입니다. –

답변

2

단일 참조 유형에서 내부 데이터를 조작하는 경우 메소드 서명에 특별한 내용이 필요하지 않습니다. 참조 유형 인 객체를 메소드에 전달할 때 사본을 전달하지 않습니다. 대신 객체에 대한 참조를 전달합니다. 이 참조를 조작하면 원래 객체가 변경됩니다.

void MyMethod(List<string> list) { 
    list.Add("foo"); 
} 

void Example() { 
    List<string> l = new List<sting>(); 
    MyMethod(l); 
    Console.WriteLine(l.Count); // Prints 1 
    MyMethod(l); 
    Console.WriteLine(l.Count); // Prints 2 
} 

이제 원본 참조가 가리키는 위치를 변경하려면 ref 수정자가 필요합니다.

2

DropDownList은 참조 유형이므로 인스턴스를 메서드에 전달하고 조작 할 수 있어야합니다. 의 메서드 내에서 참조되는 개체는 원래 인스턴스 인입니다.

기존 개체를 바꾸는 대신 업데이트하는 경우에만 ref 수정자를 지정하지 않아도됩니다.

+0

정말 고마워요! 알 겠어. – PositiveGuy