IClone 커넥터
2377 단어 clone
List<int> values = new List<int>() { 1, 2, 3, 4 };
List<int> values2 = new List<int>();
foreach (var val in values) {
values2.Add(val);
}
values2[0] = 99;
Console.WriteLine(values[0]);
Console.WriteLine(values2[0]);
첫 번째 출력문 출력 1, 두 번째 출력문 출력 99, 기대하는 답안~~
다음 한 소절 더 볼게요.
먼저 Person 클래스를 정의합니다.
class Person
{
public int ID { get; set; }
public String Name { get; set; }
public override string ToString()
{
return string.Format("{0},{1}", ID, Name);
}
}
그리고 나서
List<Person> persons = new List<Person>() { new Person() { ID = 1, Name = "lou" }, new Person() { ID = 2, Name = "chenting" } };
List<Person> persons2 = new List<Person>();
foreach (var p in persons) {
persons2.Add(p);
}
persons2[0].ID = 99; persons2[0].Name = "sai";
Console.WriteLine(persons[0]);
Console.WriteLine(persons2[0]);
첫 번째와 두 번째 모두 99,sai 출력
이 두 가지 상황이 발생한 원인에 관해서는 모두가 다 알고 있을 것이라고 믿는다.
그럼 두 번째 상황이 생기지 않으려면 어떻게 해야 하나요?
답은 간단하다. 퍼슨류가 IClone 인터페이스를 실현하도록 하자.
새로운 Person 클래스
class Person : ICloneable
{
public int ID { get; set; }
public String Name { get; set; }
public override string ToString()
{
return string.Format("{0},{1}", ID, Name);
}
public object Clone()
{
return new Person() { ID = ID, Name = Name };
}
}
그리고 호출할 때.
foreach (var p in persons) {
persons2.Add(p.Clone() as Person);
}
persons2[0].ID = 99; persons2[0].Name = "sai";
Console.WriteLine(persons[0]);
Console.WriteLine(persons2[0]);
이렇게 출력할 때
1,lou
99,sai
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
GitHub 웹 사이트에서 폴더 이름 바꾸기최근 Mac에서 작업하는 동안 git 저장소를 시작하고 물음표(?)가 있는 폴더를 만든 문제가 발생했습니다. 그것은 Mac에서는 유효한 폴더 이름이지만 Windows에서는 아닙니다. 그래서 나중에 Windows PC...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.