Tag: 结构

长寿命对象的结构与类

当你需要拥有非常小的物体时,比如说它包含2个浮动属性,并且你将拥有数百万个不会被“摧毁”的物体,结构是更好的选择还是类? 就像在xna中作为库一样,有point3s等作为结构但如果你需要长时间保持这些值,它会造成性能威胁吗?

隐藏struct上的无参数构造函数

是否可以在c#中隐藏用户的无参数构造函数 我想强制他们总是使用带参数的构造函数 例如这个职业课程 public struct Position { private readonly int _xposn; private readonly int _yposn; public int Xposn { get { return _xposn; } } public int Yposn { get { return _yposn; } } public Position(int xposn, int yposn) { _xposn = xposn; _yposn = yposn; } } 我只希望用户能够通过指定x和y坐标来新建位置 但是,无参数构造函数始终可用 我不能把它私有化。 甚至将其定义为公开 我已经读过这个为什么我不能在.NET中为结构定义默认构造函数? 但它并没有真正的帮助 […]

C#中的struct v / s类 – 请解释一下这种行为

有人可以解释一下这种行为 class testCompile { /* * Sample Code For Purpose of Illustration */ struct person { public int age; public string name; } static void Main(string[] args) { List Listperson = new List(); person myperson = new person(); for (int i = 1; i <= 2; i++) { //Assignment myperson.age = 22+i; myperson.name = "Person […]

C#P / Invoke:包含函数指针的编组结构

对不起,下面是详细的介绍。 我需要知道P / Invoke内部人员的洞察力比我更好。 这是我如何编组包含从C到C#的函数指针的结构。 我想知道这是否是最干净和/或最有效的方式。 我正在使用C编码的本机DLL连接,它提供以下入口点: void* getInterface(int id); 您必须传递getInterface(int)以下枚举值之一: enum INTERFACES { FOO, BAR }; 它返回一个指向包含函数指针的结构的指针,如: typedef struct IFOO { void (*method1)(void* self, int a, float b); void (*method2)(void* self, int a, float b, int c); } IFoo; 以下是您在C中使用它的方式: IFoo* interface = (IFoo*)getInterface(FOO); interface->method1(obj, 0, 1.0f); // where obj is an instance of […]

如果属性访问,C#Struct方法不会保存值

我需要创建一个看起来像int的结构(但是我需要一个额外的字段……),所以我创建了一个名为TestStruct的新结构,添加了一个我需要的方法(test())并重载了一些运算符,它看起来运作良好…… 下面的示例显示了问题。 如果从Val属性执行结构test()方法,则Val属性似乎丢失了值,但是如果在Val2变量上执行该方法,则该值似乎保持正确的值… 为什么会这样? static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { new TestClass(); } } public class TestClass { public TestStruct Val { get; set; } private TestStruct Val2; public TestClass() { Val.test(); Console.WriteLine(Val + “-> why is it not 10?”); //Direct assignment […]

为什么绑定到struct不起作用?

我最近遇到了一个问题,我有一个绑定到ListView的ObservableCollection。 人是我写的结构。 只要我在绑定之前设置People对象的值,一切似乎都可以正常工作。 但是,当我尝试在运行时从GUI设置值时,基础对象似乎不反映更改。 我最终通过简单地将People从一个结构改为一个类来克服了这个问题。 不需要进行其他更改。 有人可以向我解释为什么会这样吗?

将字节数组转换为托管结构

更新:这个问题的答案帮助我在GitHub上编写了开源项目AlicanC的Modern Warfare 2 Tool 。 您可以看到我如何在MW2Packets.cs中读取这些数据包以及我编写的扩展,以读取Extensions.cs中的大端数据。 我在我的C#应用​​程序中使用Pcap.Net捕获“ 使命召唤:现代战争2”的 UDP数据包。 我从库中收到一个byte[] 。 我试图像字符串一样解析它,但是效果不好。 我有的byte[]有一个通用包头,然后是另一个特定于包类型的头,然后是关于大厅中每个玩家的信息。 一个乐于助人的人为我检查了一些数据包并想出了这些结构: // Fields are big endian unless specified otherwise. struct packet_header { uint16_t magic; uint16_t packet_size; uint32_t unknown1; uint32_t unknown2; uint32_t unknown3; uint32_t unknown4; uint16_t unknown5; uint16_t unknown6; uint32_t unknown7; uint32_t unknown8; cstring_t packet_type; // \0 terminated string }; // Fields are […]

C#结构是否安全?

C#struct是否是线程安全的? 例如,如果有: struct Data { int _number; public int Number { get { return _number; } set { _number = value; } } public Data(int number) { _number = number; } } 在另一种类型: class DadData { public Data TheData { get; set; } } 是名为TheData的属性,线程安全吗?

非对象字段错误错误地对齐或重叠

我正在尝试创建以下结构: [StructLayout(LayoutKind.Explicit, Size=14)] public struct Message { [FieldOffset(0)] public ushort X; [FieldOffset(2)] [MarshalAs(UnmanagedType.ByValArray, SizeConst=5)] private ushort[] Y; [FieldOffset(12)] public ushort Z; } 我收到以下错误: 无法从程序集中加载“消息”类型,因为它包含偏移量为4的对象字段,该字段未正确对齐或由非对象字段重叠。 有谁知道为什么这会导致错误? 注意:我不能使用Pack因为我正在使用紧凑框架。 谢谢。