Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类之间交换数据_C#_Class - Fatal编程技术网

C# 在类之间交换数据

C# 在类之间交换数据,c#,class,C#,Class,我有一个名为main的主类,在这个主类中有一个名为State的变量,它是int类型。状态变量包含一个状态ID,它让程序知道它在主类中的哪个状态(菜单、说明屏幕…),我有一个从Sprite类启动的对象。现在我的问题是如何告诉对象状态已被切换(这一个很简单,我可以使这一个很容易,但下一部分会给我带来问题),以及对象如何告诉主类他想要切换状态?这是我从您的问题中理解的 Main是调用Sprite实例方法的控制器类 状态确定在精灵实例上调用的方法 在这种情况下,Sprite类应该包含一个名为Stat

我有一个名为main的主类,在这个主类中有一个名为State的变量,它是
int
类型。状态变量包含一个状态ID,它让程序知道它在主类中的哪个状态(菜单、说明屏幕…),我有一个从Sprite类启动的对象。现在我的问题是如何告诉对象状态已被切换(这一个很简单,我可以使这一个很容易,但下一部分会给我带来问题),以及对象如何告诉主类他想要切换状态?

这是我从您的问题中理解的

  • Main
    是调用
    Sprite
    实例方法的控制器类
  • 状态
    确定在
    精灵
    实例上调用的方法
在这种情况下,
Sprite
类应该包含一个名为
State
的静态属性(最好是
enum
而不是
int

实例方法负责更新状态变量。完成实例方法的执行后,调用方可以检查实例所处的状态,然后适当地确定下一个操作过程

更好的方法是根本不公开状态(除非外部对象需要使用)。在您的例子中,状态似乎仅用于确定执行的方法(我猜您有一个
switch
语句来执行此操作)


如果您希望实例根据其自身的状态执行特定的方法,那么您可以将此决定权留给实例本身,而不是由控制器来决定。该实例可以有一个方法(例如
Update()
Execute()
)根据操作的上下文(如菜单选项等)执行操作。此方法可以根据静态
状态
成员决定执行哪个内部方法。

您可能希望包含一个代码示例,以便更容易理解解释。表面上看,您可以拥有
someObject.StateChanged(int-newState)
Main.ChangeState(int-newState)
,但这取决于您的其他交互。您可能希望采用事件方法,例如。。。通常,我不希望“Main”类做很多事情,所以听起来你可能缺少一些类……是的,你完全正确,我是OOP新手,我的想法是,主类应该控制信息,而对象应该控制信息,主类应该只在需要时检查。