값은 Add
메서드로 전달됩니다. 그러나 참조 유형을 전달하면 (클래스는 항상 참조 유형 임) 값 자체는 참조입니다. 따라서 값은 값 또는 참조에 의해 전달되는지 여부가 아니라 값 유형 또는 참조 유형 인 경우 질문이 그다지 중요하지 않습니다. 이 선언으로
class MyClass
{
public int Number { get; set; }
}
, 우리가 얻을 :
myList[0]
에 의해 반환되는 값이 목록에 저장된 값의 사본이 될 것이기 때문에이하는
struct
와 함께 작동하지 않을 것이라고
가
MyClass m = new MyClass();
List<MyClass> myList = new List<MyClass>();
myList.Add(m);
myList[0].Number += 1;
Console.WriteLine(myList[0].Number); // Displays 1
Console.WriteLine(m.Number); // Displays 1
myList[0].Number += 1;
Console.WriteLine(myList[0].Number); // Displays 2
Console.WriteLine(m.Number); // Displays 2
참고. += 1
은이 임시 복사본의 Number
속성 만 증분하므로 몇 가지 프로세서 사이클을 소모하는 것 외에 다른 영향은 없습니다. 따라서 불변 구조체 만 생성하는 것이 좋습니다.
당신이 직접 객체를 표시 이제 ToString
class MyClass
{
public int Number { get; set; }
public override string ToString()
{
return Number.ToString();
}
}
을 무시하려는 경우, 당신은
myList[0].Number += 1;
Console.WriteLine(myList[0]);
Console.WriteLine(m);
당신은 심지어 운영자 과부하 myList[0] += 1
작품을 만들 수 쓸 수 있습니다 . MyClass
에서
public static MyClass operator +(MyClass m, int i)
{
m.Number += i;
return m;
}
를 선언하지만 당신의 클래스는 수를 나타냅니다 만, 숫자는 일반적으로 불변 값 유형으로 인식되고 그 경우에 불변 struct
이 선호하지 않는 한이 조금 이상한 것입니다.
public static MyStruct operator +(MyStruct m, int i)
{
return new MyStruct(m.Number + i);
}
"결과가 좋을까요?" 그것은 참조 btw에 의해 ... –
당신이 말한 것 외에, 'myClass'는 참조 또는 값 유형입니다. – horgh
여기에 참조 유형이 있다고 가정합니다. –