7

我遇到了几种在 asp.net 中编写业务逻辑的方法,但我想知道下面的 2 个示例,使用结构存储类变量有什么好处:

namespace Shopping
{
   public struct ShoppingCart
   {
       public string Color;
       public int ProductId;
   }

   public partial class MyShoppingCart 
   {

       public decimal GetTotal(string cartID)
       {
       }

       // Some other methods ...
   }
}

namespace Shopping
{
   public partial class MyShoppingCart 
   {
       public string Color{ get; set; }
       public int ProductId{ get; set; }

       public decimal GetTotal(string cartID)
       {
       }

       // Some other methods ...
   }
}
4

1 回答 1

5

正如 dsimcha 在他们的回答中所说:

每当您不需要多态性、需要值语义并希望避免堆分配和相关的垃圾收集开销时。然而,需要注意的是,结构(任意大)比类引用(通常是一个机器字)更昂贵,因此在实践中类最终可能会更快。

正如 JoshBerke 在他的回答中所说:

当您需要值语义而不是引用语义时,请使用结构。

来自http://msdn.microsoft.com/en-us/library/ms228593.aspx

1.7 结构

与类一样,结构是可以包含数据成员和函数成员的数据结构,但与类不同的是,结构是值类型,不需要堆分配。结构类型的变量直接存储结构的数据,而类类型的变量存储对动态分配对象的引用。结构类型不支持用户指定的继承,所有结构类型都隐式继承自类型对象。

结构对于具有值语义的小型数据结构特别有用。复数、坐标系中的点或字典中的键值对都是结构的好例子。对小型数据结构使用结构而不是类可以在应用程序执行的内存分配数量上产生很大差异。例如,以下程序创建并初始化一个包含 100 个点的数组。将 Point 实现为一个类,实例化了 101 个单独的对象——一个用于数组,一个用于 100 个元素。

于 2012-12-22T06:29:33.120 回答