.Net Compact Framework泛型使用的注意点

在.Net Framework 2.0发布后,泛型就已经深入人心。在CF2.0中也加入了泛型,但大家可知道CF2.0 与非精简版中泛型的区别呢?下面将详细叙述,我在.Net CF中使用泛型的几个注意事项。

泛型介绍:

泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。

举例:原先使用集合类型存储数据,数据量大后,装箱拆箱不但影响效率,而且也非安全,毕竟存放 进集合的都是Object对象。泛型对象在声明后,即定义好存放的类型,避免装箱拆箱及数据转换。

泛型的使用面很广,有泛型类、泛型接口、泛型方法、泛型委托等。那么多的使用面给开发人员提供 了相当大的便捷。

在我的实际应用中,发现.Net CF的泛型不支持2点。

1.不支持泛型递归嵌套

大家可能很奇怪,什么叫泛型递归嵌套。泛型递归嵌套即泛型的对象类型中仍然使用该泛型本身,举 例:List<List<int>>。既然泛型允许存放任何类型,那当然应该支持存放一个泛型对象, 否则也谈不上泛字吧。在非精简版中,是支持泛型嵌套的,但可惜精简版中不支持。

2.在泛型方法中,最多支持8个泛型参数。

泛型方法中,我们可以约束实际的参数个数,而不必约束对象类型,这样大大提高了可重用性。不必 类似以前猛定义Object。精简版中同样不支持。

实际测试如下:

开发平台:VS2008,Windows Mobile 5.0, .Net Compact Framework 2.0

1.在.Net Framework下的代码:

Program.cs

 1using System;
  2using System.Collections.Generic;
  3using System.Linq;
  4using System.Text;
  5
  6namespace ConsoleGenericApp
  7{
  8    class Program
  9    {
10        static void Main(string[] args)
11        {
12            MyClass1<int> clsA = new MyClass1<int>();
13            clsA.clsB = new MyClass1<MyClass1<int>>();
14
15            MyClass2<int> cls2 = new MyClass2<int>();
16
17            MyClass3<UserInfo> cls3 = new MyClass3<UserInfo> ();
18
19            System.Console.WriteLine(GetInfo<string>("1", "2", "3", "4"));
20
21            System.Console.WriteLine(GetInfo1<string>("1", "2", "3", "4", "5", "6", "7", "8", "9"));
22
23            System.Console.WriteLine(GetInfo2<UserClass1, UserClass2, UserClass3, UserClass4>
24                (new UserClass1(), new UserClass2(), new UserClass3(), new UserClass4()));
25
26            System.Console.WriteLine(GetInfo2<int, string, float, decimal, UserClass1, UserClass2, UserClass3, UserClass4, UserClass5>
27                (1, "2", 3.0f, 4.2m, new UserClass1(), new UserClass2(), new UserClass3(), new UserClass4(), new UserClass5()));
28
29            System.Console.ReadLine();
30        }
31        private static string GetInfo<T>(T t1, T t2, T t3, T t4)
32        {
33            return string.Format("info : {0} , {1} ,{2}, {3} ", t1.ToString (), t2.ToString(), t3.ToString(), t4.ToString());
34        }
35
36        private static string GetInfo1<T>(T t1, T t2, T t3, T t4, T t5, T t6, T t7, T t8, T t9)
37        {
38            return string.Format("info : {0} , {1} ,{2}, {3}, {4}, {5}, {6}, {7}, {8}", t1.ToString(), t2.ToString(), t3.ToString(), t4.ToString(), t5.ToString(), t6.ToString(),
39                t7.ToString(), t8.ToString(), t9.ToString());
40        }
41
42        private static string GetInfo2<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4)
43        {
44            return string.Format("info : {0} , {1} ,{2}, {3} ", t1.ToString (), t2.ToString(), t3.ToString(), t4.ToString());
45        }
46
47        private static string GetInfo2<T1, T2, T3, T4, T5, T6, T7, T8, T9> (T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
48        {
49            return string.Format("info : {0} , {1} ,{2}, {3}, {4}, {5}, {6}, {7}, {8}", t1.ToString(), t2.ToString(), t3.ToString(), t4.ToString(), t5.ToString(), t6.ToString(),
50                t7.ToString(), t8.ToString(), t9.ToString());
51        }
52    }
53}

时间: 2024-10-02 04:29:10

.Net Compact Framework泛型使用的注意点的相关文章

.NET Compact Framework 的类库信息

启用本地帮助查看器中提供的特定筛选器.参考各个类型和成员附带的文档中的平台和版本信息,就可以获得 .NET Compact Framework 的类库信息.只有在 .NET Framework SDK 或 Visual Studio 2005 组合帮助集合的本地帮助查看器中才可使用这些筛选器. 除了本地帮助查看器筛选器之外,类型和成员主题的几个部分还提供有关支持的设备平台.平台版本支持和平台特定的行为(在某些情况下)的信息."平台"部分列出了"Windows Mobile f

.net compact framework 加 web service的演练.

web 具体是这样的: invoke the web service of http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/CS/MathService.asmx?WSDL which service privided the math mothd such as add/sub/mulite/div. I invoke the mothd in the win ce with compac

U2 Compact Framework

简介 智能设备(比如手机.PDA 和使用 Windows CE Real Time Operating System 的工厂控制器)可以通过随 UniVerse Clients 10.3 一起发 布的新 UODONETCF.dll 库利用在 Visual Studio 中开发的应用程序.本文使用 U2 UO.NET 利用用 C# 编写的现有基于 PC 的应用程序,并介绍如何将应用程序 迁移到可以在智能设备上运行的新的精简框架应用程序.新的智能设备应用程序 使用原始程序的大部分源代码.本文介绍如何

用SQL Server CE 2.0和.NET Compact Framework开发……

用SQL Server CE 2.0和.NET Compact Framework开发紧凑而功能强大的移动应用程序 本文假定你熟悉SQL Server和Visual Studio. 概要 开发人员在为移动设备创建解决方案时可以有很多种选择.最大的挑战之一是找到一种既紧凑又健壮的本地存储方案.SQL Server CE 2.0 承诺在产品交付时两者兼备.其最新版本将比以往的版本在特色和性能上都有一个巨大的飞跃.本文将回顾开发人员目前在使用开发平台和开发工具上的一些选择.作者也将比较和总结 SQL

.NET Compact Framework下Win32 API P/Invoke的使用

由于CF是一个精简(Compact)的.NET Framework,因此在开发CF应用时有一部分功能MS并没有在CF中实现,需要直接调用Win32的API来实现.由于Win32的API是面向native代码的,一般会提供一个DLL库以及相应header文件.使用C++是十分容易和简单调用这些API,但是使用C# .NET就没那么幸运了.C#调用Win32的API往往要借助于P/Invoke的帮助,下面讲述一下P/Invoke 的使用. API的引入 调用Win32的API需要引入相应的DLL,W

.NET Compact Framework多线程环境下的UI异步刷新

在进行WinCe或者Windows Mobile开发中,通常需要把一些任务提交给工作线程(Worker Thread)完成,当worker thread 线程发生状态变更的时候需要通知UI进程刷新UI,比如一个网络连接程序,Worker Thread线程负责管理WiFi,GPRS或者3G等连接,当连接状态发生改变时候,Worker Thread把更新状态通知UI Thread,而UI Thread更新UI通知用户. 这里常常有个疑问,为什么Worker Thread不直接更新UI,这样更简单直接

.NET Compact Framework下的3G应用

在.NET Compact Framework下开发3G应用可以有两个options,1:AT command, 2:RAS.其实RAS最终也是通过AT command来管理3G设备,RAS屏蔽了技术细节,很方便地建 立TCP/IP based 的网络连接,所以推荐使用RAS,WinCE本身提供了native API可以直接操作RAS,管理3G设备及其连接.与此同时RAS也支持有线电话拨号,GPRS等应用. RAS简介 RAS的详细介绍见 Overview of RAS 由于.NET Compa

.NET Compact Framework通过托管Win32代码获得HtmlDocument

问题引入: 有过CF的项目经验的朋友一定常常遇到与BS后台对接的问题,HTML在BS系统中有着得天独厚的条件,他能够直接被用作界面显示,并且能够被C#代码和Javascript操作,因此在一些应用中BS系统可能采取在数据库中存储HTML表单的设计,例如一些表单可视化设计控件(Table Designer)生成的就是HTML,直接存储HTML的好处在于绕过了解析HTML DOM的复杂性,可是在前端与之对接的Mobile应用程序中就带来的问题,当我的.NET CF程序读取到包含HTML的字段后就显得

移动WCF: 使用.NET Compact Framework编写IM应用程序

本文讨论: .NET Compact Framework 中的邮件传输 编写简单消息传送应用程序 WCF 消息传送内幕探测 消耗 WCF Web 服务 本文使用了以下技术: .NET Compact Framework 3.5, Visual Studio 2008 移动设备的寻址能力问题一直以来都非常棘手,它 会使编写从服务器接收推送数据的 Windows Mobile 应用程序变得非常困难.小型设备一般都不具 有与其绑定的静态 IP 地址或动态 DNS 项.对于此类设备,常见的解决方法是在设