class 的 C# 无限实例
C# infinite instances of a class
我可以创建几乎无限数量的 class 实例吗?或者你能告诉我一个更好的方法吗?
这是我的问题,我想制作一个程序,让您通过点击屏幕创建圆圈,它们必须显示并相互交互。我是新手,所以我把我的项目分成了几个阶段:
1 显示表格
2 点击显示用户选择的直径和颜色的圆圈
3 为单个圆
单独制作一个class
4 让他们动起来
5 让他们互相交流
6 检查错误等
我被困在第 2 点和第 3 点之间。我不确定制作 Circle
class 和创建各种实例是最明智的方法,但这是唯一的方法我想出了这让我有可能显示无限的圆圈。我可以使用一个数组,因为我认为没有人会一次使用超过 20 个圆圈。更重要的是,我什至不认为我会发布这个,因为我做这个只是为了学习一些图形。所以,迟早,我会需要第 4 点的帮助。
我认为您正在寻找 List。它就像一个数组,因为它可以包含项目,但可以随时添加和删除项目。所以它可以同时包含 1 和 10000 个项目。唯一的限制是内存。
在编程中,您总是会受到资源的限制,在编写代码时应牢记机器的局限性。您将永远无法创建无限数量的对象。如果你认为你真的需要大量资源,那么要么你的方法是错误的,要么你的问题根本无法以有效的方式解决。在这两种情况下,您可能应该改变您的方法并考虑您的限制。
现在回到你的问题。在绘图问题中,您可能会从使用 Stack<T>
中获益匪浅。为什么?因为您可以通过从堆栈中弹出来非常轻松地撤消您的操作(并通过从您专门为重做操作创建的另一个堆栈中弹出来重做它们)。
所以我们的想法是将您的操作压入堆栈。这就像一部行动史。你可以有一个带有 do
和 undo
方法的 IAction
接口,并在几个子 classes 中实现它:Create
(用于创建圆圈),Move
(用于移动圆圈)等。每当你想做一个动作时,创建一个相关的实例class,调用do
并将实例压入堆栈。当您想撤消时,pop
并在您刚刚弹出的对象上调用 undo
。
I'm not sure that making a Circle class and creating various instances is the smartest way to do this
我这是 OOP 方式,您的直觉是正确的。为每个圆创建一个新实例,并用它来保存你的圆的状态,例如它的位置、它的颜色和现在是什么。
当然,您可以将它们存储在一个列表中,但请记住您的列表永远不会是无限的。您可能想限制某人可以画的圆圈的数量,但由于这个数字可能非常大,所以我不会打扰。
我可以创建几乎无限数量的 class 实例吗?或者你能告诉我一个更好的方法吗?
这是我的问题,我想制作一个程序,让您通过点击屏幕创建圆圈,它们必须显示并相互交互。我是新手,所以我把我的项目分成了几个阶段:
1 显示表格
2 点击显示用户选择的直径和颜色的圆圈
3 为单个圆
单独制作一个class
4 让他们动起来
5 让他们互相交流
6 检查错误等
我被困在第 2 点和第 3 点之间。我不确定制作 Circle
class 和创建各种实例是最明智的方法,但这是唯一的方法我想出了这让我有可能显示无限的圆圈。我可以使用一个数组,因为我认为没有人会一次使用超过 20 个圆圈。更重要的是,我什至不认为我会发布这个,因为我做这个只是为了学习一些图形。所以,迟早,我会需要第 4 点的帮助。
我认为您正在寻找 List。它就像一个数组,因为它可以包含项目,但可以随时添加和删除项目。所以它可以同时包含 1 和 10000 个项目。唯一的限制是内存。
在编程中,您总是会受到资源的限制,在编写代码时应牢记机器的局限性。您将永远无法创建无限数量的对象。如果你认为你真的需要大量资源,那么要么你的方法是错误的,要么你的问题根本无法以有效的方式解决。在这两种情况下,您可能应该改变您的方法并考虑您的限制。
现在回到你的问题。在绘图问题中,您可能会从使用 Stack<T>
中获益匪浅。为什么?因为您可以通过从堆栈中弹出来非常轻松地撤消您的操作(并通过从您专门为重做操作创建的另一个堆栈中弹出来重做它们)。
所以我们的想法是将您的操作压入堆栈。这就像一部行动史。你可以有一个带有 do
和 undo
方法的 IAction
接口,并在几个子 classes 中实现它:Create
(用于创建圆圈),Move
(用于移动圆圈)等。每当你想做一个动作时,创建一个相关的实例class,调用do
并将实例压入堆栈。当您想撤消时,pop
并在您刚刚弹出的对象上调用 undo
。
I'm not sure that making a Circle class and creating various instances is the smartest way to do this
我这是 OOP 方式,您的直觉是正确的。为每个圆创建一个新实例,并用它来保存你的圆的状态,例如它的位置、它的颜色和现在是什么。
当然,您可以将它们存储在一个列表中,但请记住您的列表永远不会是无限的。您可能想限制某人可以画的圆圈的数量,但由于这个数字可能非常大,所以我不会打扰。