C#의 완벽한 클론 참조 유형 객체
인용 유형의 이 특성의 장점은 말로 설명할 수 없는 것이 아니지만 우리에게 약간의 불편을 가져왔다. 즉, 때때로 우리는 메모리에 두 개의 모든 속성 값이 똑같은 대상 A와 B가 있어야 한다. 이렇게 하면 B에 대해 조작하기 편하고 A. 어떤 사람은 그 New 두 번에 두 개의 똑같은 대상이 있지 않겠느냐고 말한다. 사실 그는 실제 조작 과정에서 대상 A가 사용자의 조작 때문에일부 속성이 변경되었습니다.New에서 나온 대상은 초기 상태 유형과 속성의 일치성을 확보할 수 있을 뿐, 실행할 때 바뀌는 속성에 대해서는 아무런 힘이 없습니다.즉, 이때 우리는 A 대상을 복제하여 현재 A 대상의 모든 속성 값을 새 대상에 가져가야 한다. 그러면 현재 두 대상의 일치성을 확보할 수 있다.코드를 보십시오:
/// ///
///
///
///
private object CloneObject(object o)
{
Type t =o.GetType();
PropertyInfo[] properties =t.GetProperties();
Object p =t.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, o, null);
foreach(PropertyInfo pi in properties)
{
if(pi.CanWrite)
{
object value=pi.GetValue(o, null);
pi.SetValue(p, value, null);
}
}
return p;
}
, :
TextBox t =(TextBox)CloneObject(textBox1);
, , , DataGridView ,SetValue , . DataGridView :
/// /// DataGridView ///
///
///
public static DataGridView CloneDataGridView(DataGridView dgv)
{
try
{
DataGridView ResultDGV = new DataGridView();
ResultDGV.ColumnHeadersDefaultCellStyle = dgv.ColumnHeadersDefaultCellStyle.Clone();
DataGridViewCellStyle dtgvdcs = dgv.RowsDefaultCellStyle.Clone();
dtgvdcs.BackColor = dgv.DefaultCellStyle.BackColor;
dtgvdcs.ForeColor = dgv.DefaultCellStyle.ForeColor;
dtgvdcs.Font = dgv.DefaultCellStyle.Font;
ResultDGV.RowsDefaultCellStyle = dtgvdcs;
ResultDGV.AlternatingRowsDefaultCellStyle = dgv.AlternatingRowsDefaultCellStyle.Clone();
for (int i = 0; i < dgv.Columns.Count; i++)
{
DataGridViewColumn DTGVC = dgv.Columns[i].Clone() as DataGridViewColumn;
DTGVC.DisplayIndex = dgv.Columns[i].DisplayIndex;
if (DTGVC.CellType == null)
{
DTGVC.CellTemplate = new DataGridViewTextBoxCell();
ResultDGV.Columns.Add(DTGVC);
}
else
{
ResultDGV.Columns.Add(DTGVC);
}
}
foreach (DataGridViewRow var in dgv.Rows)
{
DataGridViewRow Dtgvr = var.Clone() as DataGridViewRow;
Dtgvr.DefaultCellStyle = var.DefaultCellStyle.Clone();
for (int i = 0; i < var.Cells.Count; i++)
{
Dtgvr.Cells[i].Value = var.Cells[i].Value;
}
if (var.Index % 2 == 0)
Dtgvr.DefaultCellStyle.BackColor = ResultDGV.RowsDefaultCellStyle.BackColor;
ResultDGV.Rows.Add(Dtgvr);
}
return ResultDGV;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return null;
}
이제 아쉬움이 없어요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception Class에서 에러 코드 해석 ~초기초편~직장에서 C# 프로젝트가 내뿜는 오류 코드를 구문 분석하고 오류의 위치를 확인하기 위해 Exception class를 활용할 수 있었습니다. 지금까지 Exception Class 에 대해서 별로 파악할 수 없었기 때...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.