小编Ali*_*hat的帖子

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

我正在设计游戏网站,许多(希望成千上万)玩家会相互同时玩某些纸牌游戏.甲板是标准牌52牌.每张卡都有一套西装和一个等级.卡片将被随机洗牌,处理,挑选,订购,播放.我的问题是,应该Card是枚举,结构还是类?

  • 对于枚举:让每张卡都是字节0..51.因此卡片占用的空间非常小.您可以将手表示为8字节的位集.当需要时,您可以非常快速地计算给定卡的套装和等级:即suit(n)= n/13.这将非常有效.如果需要为Card编写方法,请通过扩展方法编写.

  • 对于struct:不,这就像编写机器代码一样.卡是一种简单的结构,保存的数据非常少,不可变,很小.它没有太多行为,因此将其作为结构并将其视为被动数据结构.当需要时,您可以非常快速地从给定卡计算0..51中的索引.

  • 对于课堂:不,这不是一种面向对象的思维方式.制作卡片课程.让它一成不变.准确创建52个实例.让卡池保存这些实例.因此,当需要黑桃皇后时,它会向卡池询问.即使有数千场比赛正在进行,也会有一个也只有一个黑桃皇后.如果需要,可以在卡中存储索引字段0..51.

我倾向于最后一个选项(课程),但我不确定.我不太担心表现; 在此过程中,我可能会犯更严重的错误.我担心的是我的整个观点可能是错的; 也许这是一个非常简单的决定,我犹豫不决,因为我缺乏其他人拥有的一些知识.

你怎么看?

编辑:关于卡的行为.我认为一张卡片只会知道其他卡片.例如,它可以定义"谁击败谁在桥中"的部分顺序.它不需要知道关于甲板的任何信息.这将是服务器端代码; 当然,它不需要知道在屏幕等上绘制自己.

c# struct

11
推荐指数
2
解决办法
7191
查看次数

为什么我班上的内存占用了这么多空间?

我将拥有一些MyClass类的数千万个实例,并希望最小化其内存大小.在查找.net对象的大小时讨论了测量对象在内存中占用多少空间的问题 我决定遵循Jon Skeet的建议,这是我的代码:

   // Edit: This line is "dangerous and foolish" :-) 
   // (However, commenting it does not change the result)
   // [StructLayout(LayoutKind.Sequential, Pack = 1)]
   public class MyClass       
   {
      public bool isit;
      public MyClass nextRight;
      public MyClass nextDown;
   }

   class Program
   {
      static void Main(string[] args)
      {
         var a1 = new MyClass(); //to prevent JIT code mangling the result (Skeet)
         var before = GC.GetTotalMemory(true);   
         MyClass[] arr = new MyClass[10000];
         for (int i = 0; i < 10000; …
Run Code Online (Sandbox Code Playgroud)

c# memory-management

7
推荐指数
2
解决办法
1099
查看次数

标签 统计

c# ×2

memory-management ×1

struct ×1