gpt4 book ai didi

c# - 在接口(interface)中嵌套结构、接口(interface)和类

转载 作者:行者123 更新时间:2023-11-28 08:20:11 25 4
gpt4 key购买 nike

我实际上是在将一些 C++ 代码(我对此知之甚少,也从未真正使用过)翻译成 C#。通常在 C# 中我不会发现自己做这样的事情,因为它看起来有点奇怪,但是 C++ 中代码的设置方式,我发现很难不这样做。不可否认,我在编程方面一点经验都没有,但是在我从事编程的这段时间里,我已经能够很好地掌握这些概念。

无论如何,这是 C++ 代码。它也在头文件中。

#ifndef _SPRITE_H_
#define _SPRITE_H_

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


#ifndef NULL
#define NULL ((void *) 0)
#endif

typedef struct {
unsigned char *data;
int len;
int width;
int height;
} SpriteImage;


typedef struct {
unsigned char b;
unsigned char g;
unsigned char r;
unsigned char unused;
} SpritePalette;


typedef struct {
char *filename;
unsigned int nimages;
SpriteImage *images;
unsigned int palette_size;
SpritePalette *palette;
} Sprite;


typedef enum {
/* Developer errors */
SE_BADARGS,

/* sprite_new() errors */
SE_CANTOPEN,
SE_INVALID,

/* sprite_to_bmp(), sprite_to_bmp_file() and sprite_to_rgb() errors */
SE_INDEX,

/* sprite_to_bmp_file() errors */
SE_CANTWRITE
} SpriteError;

//Funcion para hacer uso de reverse_palette desde el exterior
SpritePalette * get_pal(SpritePalette *palette,int palette_len);

/* Open sprite file */
Sprite *sprite_open (const char *fname, SpriteError *error);

Sprite *sprite_open_from_data (const unsigned char *data, unsigned int size, SpriteError *error);

/* Change palette of sprite*/
void change_palete(Sprite *sprite, const char *fname, SpriteError *error);

/* Converts a sprite to bitmap file in memory */
void *sprite_to_bmp (Sprite *sprite, int i, int *size, SpriteError *error);

/* Like sprite_to_bmp(), but saves the result to a file */
int sprite_to_bmp_file (Sprite *sprite, int i, const char *writeToFile, SpriteError *error);

/* Converts a sprite to raw RGB data. The rowstride/pitch is 3*width. */
void *sprite_to_rgb (Sprite *sprite, int i, int *size, SpriteError *error);

/* Frees a Sprite* pointer */
void sprite_free (Sprite *sprite);


#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* _SPRITE_H_ */

顺便问一下,有人知道“#”引用是怎么回事吗?

我不知道这些指的是什么。

这是 C#:

interface Sprite
{
public class SpriteImage
{
private byte *data;
private int length;
private int width;
private int height;
}

public class SpritePalette
{
byte b;
byte g;
byte r;
byte unused;
}

public class Sprite
{
string fileName;
uint nImages;
uint palette_size;
SpriteImage image;
SpritePalette palette;
}

public enum SpriteErrors
{
None, //--default value
BadArguments, //--dev errors

/*--errors derived from any instance/call of the NewSprite() method */
CantOpen,
Invalid,

/*SpriteToBMP(), SpriteToBMPFile(), and SpriteToRGB() errors*/
Index,

CantWrite //--SpriteToBMPFile() errors
}

public interface ISprite
{
SpritePalette GetPalette(SpritePalette palette, int paletteLength);

Sprite SpriteOpen(string firstName, SpriteErrors* error);

Sprite SpriteOpenFromData(byte* data, uint size, SpriteErrors* error);


}

我相信您可以将这里的各个点联系起来。请记住,这显然不是我的代码,所以我真的不太了解它。如果有人需要更多 Material ,但我很乐意在必要时提供。

最佳答案

几点:
1) 你的类型不应该在接口(interface)内
2) 指针应该被转换为你在 sprite 类中的成员或者你应该在 SpriteImage 结构中的数组
3) 除非它是一个微不足道的端口,否则在没有很好地理解两种语言和要移植的代码的情况下将很难编写

关于c# - 在接口(interface)中嵌套结构、接口(interface)和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com