Tag: struct

结构 – 它的用途是什么?

我对struct类型有所了解。 但我无法理解:这是为了什么? 我什么时候用它? 类,简单的值类型和枚举 – 这就是我所需要的。 有什么建议? UPD:请! 不要告诉我结构在堆栈中(我知道这个:)。 什么结构用于?

将C ++结构转换为C#

我有一个C ++结构如下: struct CUSTOM_DATA { int id; u_short port; unsigned long ip; } custom_data; 如何将其转换为C#struct,序列化并通过tcp socket发送? 谢谢! UPD 那么C#代码会是什么? [StructLayout(LayoutKind.Sequential)] public struct CustomData { public int id; public ushort port; public uint ip; } public void Send() { CustomData d = new CustomData(); d.id = 12; d.port = 1000; d.ip = BitConverter.ToUInt32(IPAddress.Any.GetAddressBytes(), 0); IntPtr pointer […]

为什么TimeSpan和Guid Structs可以比较为null?

我注意到一些.NET结构可以与null进行比较。 例如: TimeSpan y = new TimeSpan(); if (y == null) return; 将编译得很好(与Guid结构相同)。 现在我知道stucts是值类型,并且上面的代码不应该编译,除非有一个operator ==的重载,它接受一个对象。 但是,据我所知,没有。 我用Reflector和MSDN上的文档查看了这个类。 他们两个确实实现了以下接口: IComparable, IComparable, IEquatable 但是,尝试使用相同的接口似乎没有帮助: struct XX : IComparable, IComparable, IEquatable { public int CompareTo(Object obj) { return 0; } public int CompareTo (XX other){ return 0; } public bool Equals (XX other){ return false; } public override […]

为此关键字指定struct值

我最近正在研究CancellationToken结构的内部结构,并发现了一些奇怪的结构(更确切地说,为this关键字赋值)。 其构造函数之一的代码如下: public CancellationToken( bool canceled ) { this = new CancellationToken(); if ( canceled ) { this.m_source = CancellationTokenSource.InternalGetStaticSource( canceled ); } } this关键字进行赋值的行的含义是什么? 请注意,类不能this关键字赋值 – 错误Cannot assign to ” because it is read-only 。

如何非递归地定义“原始”类型?

由于C#中的struct由其成员的位组成,因此您不能拥有包含任何T字段的值类型T : // Struct member ‘T.m_field’ of type ‘T’ causes a cycle in the struct layout struct T { T m_field; } 我的理解是上述类型的实例永远不能被实例化* – 任何尝试这样做会导致实例化/分配的无限循环(我猜这会导致堆栈溢出? ** ) – 或者,另外,另一个看待它的方式可能是定义本身没有意义; 也许这是一个弄巧成拙的实体,有点像“这句话是假的”。 但奇怪的是,如果你运行这段代码: BindingFlags privateInstance = BindingFlags.NonPublic | BindingFlags.Instance; // Give me all the private instance fields of the int type. FieldInfo[] int32Fields = typeof(int).GetFields(privateInstance); foreach (FieldInfo […]

C#Struct No无参数构造函数? 看看我需要完成什么

我使用结构传递给非托管DLL,因为 – [StructLayout(LayoutKind.Sequential)] public struct valTable { public byte type; public byte map; public byte spare1; public byte spare2; public int par; public int min; public byte[] name; public valTable() { name = new byte[24]; } } 上面的代码将无法编译,因为VS 2005会抱怨“Structs不能包含显式无参数构造函数”。 为了将这个结构传递给我的DLL,我必须传递一个struct的数组,如valTable[] val = new valTable[281]; 我想要做的是当我说new ,构造函数被调用并且它创建了一个像我试图演示的字节数组,因为DLL正在寻找每个维度中大小为24的字节数组。 我怎么能做到这一点?

你能在一个结构中有一个类吗?

在C#中是否可以使用具有类型类型的成员变量的Struct? 如果是这样,信息在哪里存储,堆栈,堆,或两者?

C#,struct vs class,更快?

可能重复: 哪个最适合数据存储结构/类? 考虑一个示例,其中我有一个Employee对象,其中包含年龄,姓名,性别,职称,薪水等属性。 我现在有一个列表,我想填充一堆Employees(每个Employee实例是唯一的)。 就速度和内存占用而言,将员工创建为Struct还是Class更为可取? 关于上述场景中Struct和Class的任何其他警告都是受欢迎的

将值类型捕获到lambda中时是否执行复制?

struct SomeStruct { public int Num { get; set; } } class Program { static Action action; static void Foo() { SomeStruct someStruct = new SomeStruct { Num = 5 }; action = () => Console.WriteLine(someStruct.Num); } static void Main() { Foo(); action.Invoke(); } } 是否创建了lambda时创建的someStruct的副本? Foo返回时是否创建了someStruct的副本? 我可以validation没有发生复制吗? 在C ++中,我实现了复制构造函数并从中进行打印。 该标准的引文将不胜感激。 任何相关的在线文章也是如此。

为什么结构不能有析构函数?

你认为对这个问题的采访最好的答案是什么? 我想我在这里找不到这个副本,如果有的话请链接。