C#基于Object解决方案

开发 后端
这里介绍C#基于Object解决方案,您可以通过提供类型特定的(因而是类型安全的)高性能堆栈来克服上述两个问题。对于整型,可以实现并使用 intstack。

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

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. }   
  7. IntStack stack = new IntStack();  
  8. stack.Push(1);  
  9. int number = stack.Pop();  
  10.  
  11. //对于字符串,可以实现 stringstack:  
  12.  
  13. public class StringStack  
  14. {  
  15. string[] m_Items;   
  16. public void Push(string item){...}  
  17. public string Pop(){...}  
  18. }  
  19. StringStack stack = new StringStack();  
  20. stack.Push("1");  
  21. string number = stack.Pop();  

【编辑推荐】

  1. C# lock关键字叙述
  2. C#.Net FrameWork简介
  3. C# new和override简单描述
  4. C#值类型和引用类型浅谈
  5. C#标识符简单分析
责任编辑:佚名 来源: CSDN
相关推荐

2010-08-05 10:05:14

C#枚举值

2010-02-05 10:16:35

C++断点无效

2009-09-24 15:45:23

2009-08-26 10:40:39

C# Static H

2009-03-18 09:26:23

Winform多线程C#

2009-08-04 15:18:11

C# Actor

2011-04-29 14:53:56

SimpleFrame

2009-04-02 08:23:24

ARM上网本移动OS

2020-12-18 17:27:20

物联网资产跟踪IOT

2023-06-21 11:27:53

2019-01-18 05:22:39

区块链智能合约网络安全

2023-04-28 07:37:37

混合云管理云原生

2009-12-11 15:41:18

华为路由器接入

2018-12-03 12:17:27

Semptian解决方案

2012-05-27 16:21:31

IDC华为

2018-12-03 11:59:42

Inventec解决方案

2018-12-03 12:13:21

Mellanox解决方案

2018-12-03 12:26:30

YADRO解决方案

2010-07-12 10:08:40

ibmdwSOA
点赞
收藏

51CTO技术栈公众号