Мне нужно «скопировать» объект. Я попытался использовать интерфейс IClonable, безрезультатно, и наиболее разумным решением для меня является использование небезопасного кода для создания указателя на объект, а затем запись метода, такого как Memcpy в C. Единственная проблема заключается в создании указателя на управляемый тип , Я предполагаю, что это приведет к проблемам с сборщиком мусора, но если можно использовать маршалинг или что-то, чтобы создать указатель на управляемый объект, тогда я мог бы написать такую функцию, как memcpy на C, и просто скопировать мой объект. Если структуры могут быть неуправляемыми, то почему объекты не могут быть? Объект по существу является указателем структуры, поэтому теоретически он должен быть равен размеру IntPtr справа?C# Указатель на объект?
ответ
Я решил это самостоятельно, для тех, кто сказал мою идею использования указателей, которые исходят из моего фона с помощью C ... В любом случае, используя сериализацию, этот метод сделал именно то, что мне было нужно.
public object Clone()
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, this);
ms.Position = 0;
return formatter.Deserialize(ms);
}
}
Это хорошее решение для глубокой копии сложного объекта. – evanmcdonnal
@user, я рад, что вы нашли решение и обратились к нему, чтобы опубликовать его здесь. Я сам использовал этот подход. Однако предположения, сделанные в вашем вопросе, указывают на то, что у вас много неправильных представлений о том, как работает управляемый язык, такой как C# (в CLR - или Java в JVM). Прежде всего, это понятие о том, что вы можете «memcopy» объекта и прийти к новому, игнорирует концепцию сбора мусора; как система GC узнает, что ей необходимо в конечном итоге освободить эту память? (и независимо от того, CLR должен знать обо всех объектах, для которых CLR работает вообще) –
- 1. Преобразование C++: иметь указатель на объект, вычислять указатель на объект
- 2. C++ Указатель указателя на объект
- 3. Указатель на указатель C++
- 4. Как создать указатель на объект в C#?
- 5. C++: Как правильно вернуть указатель на объект
- 6. C# Конструктор, возвращающий указатель на другой объект
- 7. Объект-указатель копирования на запись в C++
- 8. Как передать указатель на объект функции? C++
- 9. Сделать указатель на объект в конструкторе C++
- 10. C++ указатель на класс, а не объект
- 11. Указатель C++ для указателя на собственный объект
- 12. Кастинг-указатель на объект void * в C++
- 13. указатель на объект функции в C++
- 14. указатель на объект == указатель на первый элемент?
- 15. C++ Удаление указатель на объект, который содержит другой указатель
- 16. C++ многопоточный указатель на указатель на указатель
- 17. C - указатель на указатель на указатель
- 18. C++ объект указатель меняется расположение
- 19. Локальный указатель на объект
- 20. JS указатель на объект
- 21. Указатель на внешний объект nil
- 22. Базовый указатель на производный объект?
- 23. C - литье указатель на указатель на аннулированию
- 24. C++ push_back объект и получить указатель на объект
- 25. Ручки и указатель на объект
- 26. В C/C++, char * arrayName [] [] указатель на указатель на указатель ИЛИ указатель на указатель?
- 27. Создать указатель на объект «this»
- 28. C++ указатель на объекты
- 29. C указатель на указатель skiss
- 30. Указатель на указатель в C
Какой объект вы пытаетесь скопировать? Как вы реализовали метод 'IClonable.Clone'? Вы _call_ свой метод 'Clone()'? Вы пытаетесь скопировать/передать объект C# на программу C? –
Да, конечно. Мой объект содержит объект List, который не клонируется (я думаю, это связано с тем, что интерфейс IClonable предоставляет только метод для мелкого клонирования.) – user1454902
Эти идеи очень плохие. Просто создайте конструктор копирования или реализуйте 'IClonable', в любом случае это не имеет значения. Вам нужно будет написать метод, в котором вы установите каждое значение в новом объекте так, как оно есть в старом. – evanmcdonnal