Tag: struct

C的内联匿名结构定义是否有等效的C#语法?

问候Overflowers, 我知道在C中我们可以使用变量声明定义一个内联结构,以便结构类型特定于此变量。 这不是单独定义类型,而是将变量声明为该结构类型。 这可能在C#中吗? 谢谢 !

为什么C#中的类没有循环布局问题?

public struct Unit { Unit u; } 原因: 类型为“单元”的结构成员“Unit.u”会在结构布局中生成一个循环。 但 public class Unit { Unit u; } 编译。 我理解我认为的问题。 引用Unit对象时将形成无限循环,因为它必须初始化另一个成员Unit ,依此类推。 但是为什么编译器只为structs限制问题呢? 这个问题也不存在于class吗? 我错过了什么吗?

为什么写入24位结构不是primefaces的(当写入32位结构时)?

我是一个修补匠 – 毫无疑问。 出于这个原因(并且除此之外),我最近做了一个小实验来证实我怀疑写入struct不是primefaces操作,这意味着所谓的“不可变”值类型试图强制执行某些约束可能会假设失败了。 我使用以下类型作为插图写了一篇关于此的博客文章 : struct SolidStruct { public SolidStruct(int value) { X = Y = Z = value; } public readonly int X; public readonly int Y; public readonly int Z; } 虽然上面看起来像X != Y或Y != Z永远不会是真的类型,但事实上,如果值是“中间分配”,同时它被复制到另一个位置, 则会发生这种情况。一个单独的线程。 好的,很重要。 好奇心和更多。 但后来我有这种预感:我的64位CPU实际上应该能够primefaces地复制64位,对吧? 那么如果我摆脱了Z而只是坚持使用X和Y呢? 那只是64位; 应该可以一步覆盖它们。 果然,它奏效了。 (我意识到你们中的一些人现在可能正在皱起眉头,想着, 是啊 , 呃。这怎么有趣?幽默我。)当然,我不知道这是否得到保证或者不给我的系统。 我对寄存器,缓存未命中等几乎一无所知(我实际上只是在不理解其含义的情况下反驳了我听过的术语); 所以现在这对我来说都是一个黑盒子。 接下来我再次尝试,只是在预感 – […]

覆盖结构中的默认值(c#)

是否可以设置或覆盖结构的默认状态? 作为一个例子,我有一个 enum something{a,b,c,d,e}; 以及为该枚举链接2个值的结构 struct SomethingData { something type; int Value; double Multipler; SomethingData(something enumVal, int intVal, double DblVal) {…} } 但是我可以指定默认状态 SomethingData(something.c,0,1);

C#为什么需要struct,如果类可以覆盖它?

只是想知道为什么我们需要struct如果类可以做所有结构可以和更多吗? 我认为,在课堂上放置值类型没有副作用。 编辑:看不到使用struct的任何强有力的理由 结构类似于类,具有以下主要差异: 结构是值类型,而类是引用类型。 结构不支持inheritance(除了隐式派生自对象)。 结构可以包含类可以包含的所有成员,但以下内容除外: 无参数构造函数 终结者 虚拟会员 当需要值类型语义时,使用结构而不是类。 结构的好例子是数字类型,其中赋值复制值而不是引用更自然。 因为struct是值类型,所以每个实例都不需要实例化堆上的对象。 在创建类型的许多实例时,这可能很重要。

结构数组示例

我对c#中的结构有点新意。 我的问题是: 编写一个控制台应用程序,它接收一组学生的以下信息:studentid,studentname,coursename,birth-of-birth ..应用程序还应该能够显示正在输入的信息。使用结构实现此… 我已经到了这个 – > struct student { public int s_id; public String s_name, c_name, dob; } class Program { static void Main(string[] args) { Console.WriteLine(“Please enter StudentId, StudentName, CourseName, Date-Of-Birth”); s_id = Console.ReadLine(); s_name = Console.ReadLine(); c_name = Console.ReadLine(); s_dob = Console.ReadLine(); student[] arr = new student[4]; } } 请在此之后帮助我..

在显式结构中将几个CLR引用字段相互叠加?

编辑:我很清楚这对于值类型非常有效,我的具体问题是将其用于引用类型。 Edit2:我也知道你不能在结构中覆盖引用类型和值类型,这只是为了将几个引用类型字段相互重叠。 我一直在修补.NET / C#中的结构,我发现你可以这样做: using System; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Foo { } class Bar { } [StructLayout(LayoutKind.Explicit)] struct Overlaid { [FieldOffset(0)] public object AsObject; [FieldOffset(0)] public Foo AsFoo; [FieldOffset(0)] public Bar AsBar; } class Program { static void Main(string[] args) { var overlaid = new Overlaid(); overlaid.AsObject = new Bar(); Console.WriteLine(overlaid.AsBar); […]

扑克牌:它们应该是枚举还是结构或类?

我正在设计游戏网站,许多(希望成千上万)玩家将同时互相玩某些纸牌游戏。 甲板是标准牌52牌。 每张卡都有一套西装和一个等级。 这些卡片将被随机洗牌,处理,挑选,订购和播放。 我的问题是, Card应该是枚举,结构还是类? 对于枚举:让每张卡都是字节0..51。 因此卡片占用的空间非常小。 您可以将手表示为8字节的位集。 您可以在需要时非常快速地计算给定卡的套装和等级:即suit(n)= n / 13。 这将非常有效。 如果需要为Cards编写方法,请通过扩展方法编写。 对于struct:不,这就像编写机器代码一样。 卡是一种简单的结构,保存的数据非常少,不可变,很小。 它没有太多行为,因此将其作为结构并将其视为被动数据结构。 当需要时,您可以非常快速地从给定卡计算0..51中的索引。 对于课堂:不,这不是一种面向对象的思维方式。 制作卡片课程。 让它永恒不变。 准确创建52个实例。 让卡池保存这些实例。 因此,当需要黑桃皇后时,它会向卡片池询问。 即使有数千场比赛正在进行,也会有一个也只有一个黑桃皇后。 如果需要,可以在卡中存储索引字段0..51。 我倾向于最后一个选项(课程),但我不确定。 我不太担心表现; 在此过程中,我可能会犯更严重的错误。 我担心的是我的整个观点可能是错的; 也许这是一个非常简单的决定,我犹豫不决,因为我缺乏其他人拥有的一些知识。 你怎么看? 编辑:关于卡的行为。 我认为一张卡片只会知道其他卡片。 例如,它可以定义关于“谁击败谁在桥中”的部分顺序。 它不需要知道关于甲板的任何信息。 这将是服务器端代码; 当然,它不需要知道在屏幕上绘制等。

Struct – Layout.Explicit – 构造函数 – 完全分配字段

为什么我使用: struct MyStruct { [FieldOffset (0)] public uint Data; [FieldOffset (0)] public byte Something; } public MyStruct (uint pData) { Data = pData; // setting Data field also sets Something field } C#说我需要分配’Something’字段:/我知道我可以做一个“构造函数:this()”但是编译器应该知道’Data’字段包含’Something’字段。 所以,我应该先调用无参数构造函数,这是唯一的方法吗?

C# – 调用具有所有默认参数的结构构造函数

今天我在创建一个包含大量数据的struct时遇到了这个问题。 这是一个例子: public struct ExampleStruct { public int Value { get; private set; } public ExampleStruct(int value = 1) : this() { Value = value; } } 看起来很好,花花公子。 问题是当我尝试使用此构造函数而未指定值并希望将参数的默认值1使用时: private static void Main(string[] args) { ExampleStruct example1 = new ExampleStruct(); Console.WriteLine(example1.Value); } 此代码输出0并且不输出1 。 原因是所有结构都具有公共参数构造函数。 所以,就像我在Main调用this()我的显式构造函数一样, new ExampleStruct()实际调用ExampleStruct()但不调用ExampleStruct(int value = 1)时会发生同样的事情。 因为它这样做,它使用int的默认值0作为Value 。 更糟糕的是,我的实际代码是检查int value […]