TheTalion
@TheTalion

Как создать новый экземпляр класса, а не присваивать ссылку?

Есть класс:
public class Character {
int i = 1;
}

Есть второй класс:
public class Characters {
public Character character;
void Example(Character _character){
character = new Character();
character = _character; //поменяли ссылку на объект, а не присвоили все значения класса новому экземпляру.
//Можно, конечно, сделать так:
character.i = _character.i;
//но когда полей много, то это бред
}
}


Как создать новый экземпляр класса с помощью уже готового экземпляра (присвоить значения полей одного экземпляра класса другому), а не присваивать полю ссылку на другой класс? (конструкторы использовать нельзя) Вроде бы вопрос банальный, но в не смог сформировать для гугла.
  • Вопрос задан
  • 766 просмотров
Решения вопроса 2
arusef
@arusef
Novice .NET dev
Есть метод MemberwiseClone, он делает примерно то же, что вы описали. Но вложенные ссылочные типы не будут копироваться, будет копирована лишь ссылка.
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
можете через рефлексию написать универсальный Copy/Clone. Типа такого
public static void CopyTo( this object S, object T )
{
    foreach( var pS in S.GetType().GetProperties() )
    {
        foreach( var pT in T.GetType().GetProperties() )
        {
            if( pT.Name != pS.Name ) continue;
            ( pT.GetSetMethod() ).Invoke( T, new object[] 
            { pS.GetGetMethod().Invoke( S, null ) } );
        }
    };
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы