业务逻辑类
我在asp.net中遇到了几种编写业务逻辑的方法,但我想知道下面的两个例子,使用struct来存储类变量有什么好处:
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 ... } }
正如dsimcha在回答中所述 :
每当您不需要多态时,需要值语义,并希望避免堆分配和相关的垃圾收集开销。 然而,需要注意的是,结构(任意大)传递比类引用(通常是一个机器字)更昂贵,因此类在实践中最终会更快。
正如JoshBerke在答案中所述 :
当您需要值语义而不是引用语义时,请使用结构。
来自http://msdn.microsoft.com/en-us/library/ms228593.aspx
1.7结构
与类一样,结构体是可以包含数据成员和函数成员的数据结构,但与类不同,结构体是值类型,不需要堆分配。 结构类型的变量直接存储结构的数据,而类类型的变量存储对动态分配的对象的引用。 结构类型不支持用户指定的inheritance,并且所有结构类型都隐式inheritance自类型对象。
结构对于具有值语义的小型数据结构特别有用。 复数,坐标系中的点或字典中的键值对都是结构的好例子。 对小型数据结构使用结构而不是类可以使应用程序执行的内存分配数量产生很大差异。 例如,以下程序创建并初始化100个点的数组。 将Point实现为类,实例化101个单独的对象 – 一个用于数组,一个用于100个元素。
- 十进制ToString格式,至少给出1位数,没有上限
- 在两个winforms之间共享一个变量
- ASP.Net DropDownList OnSelectedIndexChange未触发
- .GetAwaiter()和ConfigureAwait()之间的区别
- C#:避免if(x为Foo){…} else if(x is Bar){…}用于数据结构
- 从代码中关闭Silverlight中的Out of Browser应用程序
- 用于Windows的文件的服务器端病毒扫描
- Autofac,IDisposable和手动呼叫。在某些情况下解决
- 如果我在visual studio中选择它,“转换为Web应用程序”选项会做什么?