C#泛型的使用_ASP.NET泛型实例
2014-07-05 14:31:37  By: dwtedx

他的文章中解释了泛型如何对非泛型有用的,并说明如何使用泛型代码重用

介绍
像你这样的开发人员都熟悉面向对象编程,了解它提供的好处。

其中一个面向对象编程的最大好处是代码复用,在其中创建一个基类,继承它的派生类。

派生类可以简单地重写虚方法或添加一些新的方法可以自定义基类的行为,以满足您的需要。

仿制药是由公共语言运行库(CLR)和提供的代码重用和算法再使用另一种形式的编程语言提供了另一种机制。
泛型提供,而无需引用特定的数据类型创建类型安全的代码的代码模板。泛型允许你实现类型安全在编译时。

它们允许你创建一个数据结构,而不需要特定的数据类型。当该数据结构被使用,然而,编译器可以确保它使用的类型是类型安全一致。

我想讨论泛型的两个好处,一个是类型安全,另一个是性能用一个例子解释之前。


类型安全
仿制药主要用于收藏,但该框架类库中也有类似的ArrayList,Hashtable中,排序列表,堆栈,队列非泛型集合类。

因此,首先,我们看到了一个非泛型集合类的一个实例。换句话说,ArrayList中,我们添加的整数值的数组列表和列表中的值执行加法运算。
您需要创建一个类,ArrayListOperation,并定义一个加法方法如下面的代码片段。

using System.Collections;
namespace TypeSafety
{
    class ArrayListOperation
    {
        public static int Addition()
        {
            ArrayList list = new ArrayList();
            list.Add(5);
            list.Add(9);
 
            int result = 0;
            foreach (int value in list)
            {
                result += value;
            }
            return result;
        }
    }
}

当你运行这个代码,你从方法得到一个返回值。
正如你在前面的例子中看到有整数值的数组列表,得到的结果如预期,但现在添加一个值到ArrayList的数据类型是float和执行相同的加法运算。

让我们来看看更新后的代码下面的代码片段。

using System.Collections;
namespace TypeSafety
{
    class ArrayListOperation
    {
        public static int Addition()
        {
            ArrayList list = new ArrayList();
            list.Add(5);
            list.Add(9);
            list.Add(5.10);
 
            int result = 0;
            foreach (int value in list)
            {
                result += value;
            }
            return result;
        }
    }
}
在上面的代码中,所有三个值很容易添加到数组列表,因为ArrayList类的add()方法的值是一个对象类型,但使用检索每个语句的值时,

每个值将被分配一个int数据类型的变量。然而,这个数组列表有整数和浮点型值的组合和float值不会转换为int隐式。

这就是为什么该代码将给予例外“指定的转换无效。”这意味着,一个ArrayList不是类型安全的。这也意味着,一个ArrayList可分配任何类型的值。
泛型允许你实现类型安全在编译时。它们允许你创建一个数据结构,而不需要特定的数据类型。

当该数据结构被使用,然而,编译器可以确保它使用的类型是类型安全一致。泛型提供了类型安全,但没有性能或代码膨胀的任何损失。

该System.Collections.Generics命名空间包含了泛型集合。现在,让我们来看看一个泛型集合列表的例子。


using System.Collections.Generic;
namespace TypeSafety
{
    class ListOperation
    {
        public static int Addition()
        {
            Listlist = new List();
            list.Add(5);
            list.Add(9);            
 
            int result = 0;
            foreach (int value in list)
            {
                result += value;
            }
            return result;
        }
    }
}
方法签名的前一行表示没有必要做一个强制转换为项目添加到一个泛型类型列表。如果列表类型为T,则该项目将被T型。
现在你明白谁具有更好的性能。泛型集合类具有比非泛型集合类更好的性能。让我们来看看下面的代码片段的例子。


namespace Performance
{
    class Program
    {
        static void Main(string[] args)
        {
            NonGenericPerformance();
            GenericPerformance();
            Console.ReadKey();
        }
        static void NonGenericPerformance()
        {
            long operationTime = 0;
            ArrayList arraylist = new ArrayList();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 1; i <= 100000; i++) { arraylist.Add(i); } operationTime = sw.ElapsedMilliseconds; 
Console.WriteLine("Array List {0} values add time is {1} milliseconds", 
            arraylist.Count, operationTime); sw.Restart(); 
            foreach (int i in arraylist) { int value = i; } operationTime = sw.ElapsedMilliseconds; 
            Console.WriteLine("Array List {0} values retrieve time is {1} milliseconds", 
            arraylist.Count, operationTime); } static void GenericPerformance() 
            { long operationTime = 0; Listlist = new List();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 1; i <= 100000; i++) { list.Add(i); } operationTime = sw.ElapsedMilliseconds; 
            Console.WriteLine("List {0} values add time is {1} milliseconds", list.Count, operationTime); 
            sw.Restart(); foreach (int i in list) { int value = i; } operationTime = sw.ElapsedMilliseconds;
           Console.WriteLine("List {0} values retrieve time is {1} milliseconds", 
            list.Count, operationTime); } 
      } 
}

如何使用泛型代码重用?

在这里,我将使用泛型介绍的代码重用一个简单的概念。我将使用一个通用的方法填充的UI列表(下拉,复选框,单选按钮)。因此,让我们看看代码。

首先创建一个具有三个字段ID,标题和类型(UI实体类型)的表硕士学位。让我们来看看数据库脚本创建表和数据库的插入。

查看更多请查看源码、如果有问题可以给我留言

源码下载链接: http://dwtedx.com/download.html?bdkey=s/1o6JlG74 密码: x6ao

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

DD记账
top
+