我正在翻译一个C游戏:https://github.com/minirop/Super-Mario-Remake转向 C# 是为了获得乐趣并提高我的 C# 编程能力。我在 C 编程方面没有那么丰富的经验,并且遇到了一个我不知道如何在 C# 中实现的结构。
typedef struct _state_t {
void (*init)(struct _state_t * s);
void (*update)(struct _state_t * s, Uint32 elapsedTime);
void (*handleEvent)(struct _state_t * s);
void (*draw)(struct _state_t * s, SDL_Surface * surface);
void (*clean)(struct _state_t * s);
void * data;
} state_t;
到目前为止我尝试过的是:
public class state_t
{
public void init(state_t S)
{
state_t s;
s = S;
}
public void update(state_t S, UInt32 ElapsedTime)
{
state_t s;
UInt32 elapsedTime;
s = S;
elapsedTime = ElapsedTime;
}
public void handleEvent(state_t S)
{
state_t s;
s = S;
}
public void draw(state_t S, SDL.SDL_Surface Surface)
{
state_t s;
SDL.SDL_Surface surface;
s = S;
surface = Surface;
}
public void clean(state_t S)
{
state_t s;
s = S;
}
public void data()
{
}
}
但我认为这是不对的。我收到一个错误:
state_t MS_get()
{
state_t state = new state_t();
state.init = MS_init; // Error 2 Cannot assign to 'init' because it is a 'method group'
} ...
最佳答案
您已将 init
定义为方法,因此需要调用它;不分配它。像这样的东西应该有效:
state.init(MS_init);
但是,我看到在该方法中,您只是将状态保存在 init()
方法内声明的变量中,这不会实现任何目标。
关于c# - 将此 C 结构转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37509638/