你如何只分配给一个指针在c#为我的撤消重做类
How do you assign only to a pointer in C# for my undo redo class
我试图创建一个撤消管理器,不管你传递什么对象。但是我不知道如何在c#中做到这一点。我想做一些事情,比如一个指向原始对象的指针,只改变指针指向的位置。
c#代码public class UndoableObject<T> : IUndoableAction
{
private T UndoObject;
private T ClonedObject;
private readonly string _name;
public string Name
{
get { return _name; }
}
public UndoableObject(ref T ObjectToUndo, string name)
{
_name = name;
UndoObject = ObjectToUndo;
ClonedObject = ObjectExtensions.Copy<T>(ObjectToUndo);
}
public void Redo()
{
T temp = ObjectExtensions.Copy<T>(UndoObject);
UndoObject = ClonedObject;
ClonedObject = temp;
}
public void Undo()
{
T temp = ObjectExtensions.Copy<T>(UndoObject);
UndoObject = ClonedObject;
ClonedObject = temp;
}
}
我想要发生的事情的c++实现
template<typename T>
public class UndoableObject : IUndoableAction
{
private T *UndoObject;
private T *ClonedObject;
private string _name;
public string GetName
{
return _name;
}
public UndoableObject(T *ObjectToUndo, string name)
{
_name = name;
UndoObject = ObjectToUndo;
ClonedObject = &ObjectExtensions.Copy(*ObjectToUndo);
}
public void Redo()
{
T *temp = &ObjectExtensions.Copy(*UndoObject);
delete UndoObject;
UndoObject = ClonedObject;
ClonedObject = temp;
}
public void Undo()
{
T *temp = &ObjectExtensions.Copy(*UndoObject);
delete UndoObject;
UndoObject = ClonedObject;
ClonedObject = temp;
}
}
我知道可能有内存泄漏,但我写了c++没有编译它。
看一下以下内容:
//using System;
//using Sytem.Collections.Generic
public class UndoableObject<T>
{
List<T> _list = new List<T>();
string _name;
int _step = 0;
public UndoableObject(T source, string name)
{
_list.Clear();
_list = new List<T>();
_list.Add(source);
_name = name;
_step = 0;
}
public string GetName
{
get { return _name; }
}
public void Record(T item)
{
_list.Add(item);
_step++;
}
public T Undo()
{
_step--;
if (_step >= 0)
{
return _list[_step];
}
else
{
_step = 0;
return _list[_step];
}
}
public T Redo()
{
_step++;
if (_step < _list.Count)
{
return _list[_step];
}
else
{
_step = _list.Count - 1;
return _list[_step];
}
}
}
基本用法:
var pictureBox1 = new PictureBox();
var _bitmap = new Bitmap(300, 300);
var uo = new UndoableObject<Bitmap>(_bitmap, "bitmap");
撤销:
pictureBox1.Image = uo.Undo();
记录:
uo.Record((Bitmap)pictureBox1.Image);
重做:
pictureBox1.Image = uo.Redo();
相关文章:
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 为什么我的代码在指针方面停止运行?
- C++为什么我的指针选择排序中存在分段错误?
- 指针相关的UE4崩溃.我的指针哪里错了?
- 如果我删除指针,我的C++程序会意外删除系统文件吗?
- 使用唯一指针调用函数会使我的程序崩溃
- 是否允许调用方对我的 Builder 类使用任何指针类型(包括智能指针)?
- 所有shared_ptr都指向我的向量中的同一指针
- 为什么我的函数无法使用指针打印多维数组的元素?
- 我不明白我的错误需要返回一个指针数组
- c ++ 2d 数组和指向指针的指针 - 我不明白这段代码
- 作为 int 传递和类内部指针之间的差异给我带来了分段错误
- 为什么我的拆卸C 代码使用指令指针和偏移来获取字符串文字
- 为什么我的简单C++程序使用队列和 fstream 错误到无效指针
- 为什么我的迭代器和指针不提供相同的地址
- 使用我的共享指针获取内存泄漏
- 为什么我的指针数组分配不起作用
- 如何制作指针来调用我的成员函数
- 我的问题是关于类成员函数作为类指针的返回类型