C#基于Object解决方案

C#语言有很多值得学习的地方,这里我们主要介绍C#基于Object解决方案,包括介绍编译器允许在任何类型和Object之间进行强制类型转换等方面。

成都创新互联公司IDC提供业务:郑州服务器托管,成都服务器租用,郑州服务器托管,重庆服务器租用等四川省内主机托管与主机租用业务;数据中心含:双线机房,BGP机房,电信机房,移动机房,联通机房。

C#基于Object解决方案存在两个问题。第一个问题是性能。在使用值类型时,必须将它们装箱以便推送和存储它们,并且在将值类型弹出堆栈时将其取消装箱。装箱和取消装箱都会根据它们自己的权限造成重大的性能损失,但是它还会增加托管堆上的压力,导致更多的垃圾收集工作,而这对于性能而言也不太好。即使是在使用引用类型而不是值类型时,仍然存在性能损失,这是因为必须从 Object 向您要与之交互的实际类型进行强制类型转换,从而造成强制类型转换开销:

 
 
 
  1. Stack stack = new Stack();
  2. stack.Push("1");
  3. string number = (string)stack.Pop();

C#基于Object解决方案的第二个问题(通常更为严重)是类型安全。因为编译器允许在任何类型和Object之间进行强制类型转换,所以您将丢失编译时类型安全。例如,以下代码可以正确编译,但是在运行时将引发无效强制类型转换异常:

 
 
 
  1. Stack stack = new Stack();
  2. stack.Push(1);
  3. //This compiles, but is not type safe, and will throw an exception: 
  4. string number = (string)stack.Pop();

您可以通过提供类型特定的(因而是类型安全的)高性能堆栈来克服上述两个问题。对于整型,可以实现并使用 intstack:

 
 
 
  1. public class IntStack
  2. {
  3. int[] m_Items; 
  4. public void Push(int item){...}
  5. public int Pop(){...}
  6. IntStack stack = new IntStack();
  7. stack.Push(1);
  8. int number = stack.Pop();
  9. //对于字符串,可以实现 stringstack:
  10. public class StringStack
  11. {
  12. string[] m_Items; 
  13. public void Push(string item){...}
  14. public string Pop(){...}
  15. }
  16. StringStack stack = new StringStack();
  17. stack.Push("1");
  18. string number = stack.Pop();

新闻名称:C#基于Object解决方案
文章地址:http://www.zyruijie.cn/qtweb/news23/2823.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联