C#学习之泛型准备

想要把泛型搞明白,最好先弄明白下面的代码实例

本实例是建立了两个类,然后在类中可以添加任意类型的值,并且可以利用foreach语句读出

  1 //第一个节点类,放在一个文件中
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Linq;
  5 using System.Text;
  6 using System.Threading.Tasks;
  7 using System.Collections;
  8
  9 namespace CommonGeneral
 10 {
 11     //编写节点类,类型为object(在c#中所有的类型都是object 类的派生类)
 12     //可以向本类中添加任何类型的值
 13     //本类具有的属性是next,prev,Value
 14     public class LinkNode
 15     {
 16         public LinkNode(object value)
 17         {
 18             this.Value = value;
 19         }
 20
 21         public object Value
 22         {
 23             get;
 24             private set;//设置成private将不允许在类外用直接向本属性赋值
 25             //只允许在对象的初始化时赋值
 26         }
 27         public LinkNode next
 28         {
 29             get;
 30             internal set;//internal修饰符约定在本程序集内的任何其他函数模块中
 31             //都可以对它赋值。
 32         }
 33         public LinkNode prev
 34         {
 35             get;
 36             internal set;
 37         }
 38     }
 39 }
 40 //第二个类,是对第一个类的调用和存取,建立链表,
 41 //单独放在一个文件家中
 42 using System;
 43 using System.Collections.Generic;
 44 using System.Linq;
 45 using System.Text;
 46 using System.Threading.Tasks;
 47 using System.Collections;
 48
 49 namespace CommonGeneral
 50 {
 51     //IEnumberable接口是System.Collections命名空间下的一个程序接口
 52     //下面是这个接口的函数
 53     /*
 54          namespace System.Collections
 55          {
 56     // 摘要:
 57     //     公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
 58         public interface IEnumerable
 59         {
 60            // 摘要:
 61         //     返回一个循环访问集合的枚举数。
 62         //
 63         // 返回结果:
 64         //     一个可用于循环访问集合的 System.Collections.IEnumerator 对象。
 65         [DispId(-4)]
 66         IEnumerator GetEnumerator();
 67        }
 68     }
 69      */
 70     class BigList:IEnumerable
 71     {
 72         public LinkNode Last { get; private set; }
 73         public LinkNode First { get; private set; }
 74         public LinkNode AddLast(object value)
 75         {
 76             var newnode = new LinkNode(value);
 77             if(First==null)
 78             {
 79                 First = newnode;
 80                 Last = newnode;
 81                 Last.next = null;
 82                 Last.prev = null;
 83             }
 84             else
 85             {
 86                 Last.next = newnode;
 87                 newnode.prev = Last;
 88                 Last = newnode;
 89             }
 90             return newnode;
 91         }
 92         public IEnumerator GetEnumerator()
 93         {
 94             LinkNode current = First;
 95             while(current!=null)
 96             {
 97                 yield return current.Value;
 98                 current = current.next;
 99             }
100         }
101        /* IEnumerator IEnumerable.GetEnumberator()
102         {
103             return GetEnumberator();
104         }*/
105     }
106 }
107
108 //------------主函数---------------
109 using System;
110 using System.Collections.Generic;
111 using System.Linq;
112 using System.Text;
113 using System.Threading.Tasks;
114
115 namespace CommonGeneral
116 {
117     class Program
118     {
119         static void Main(string[] args)
120         {
121             BigList list = new BigList();
122             list.AddLast(100);
123             list.AddLast("nihao");
124             list.AddLast(true);
125             list.AddLast("Any type value can add into this set");
126             foreach(var value in list)
127             {
128                 Console.WriteLine(value.ToString());
129             }
130             Console.ReadKey();
131             return;
132         }
133     }
134 }
时间: 2024-10-12 19:32:44

C#学习之泛型准备的相关文章

.net学习之泛型、程序集和反射

一.泛型1.CLR编译时,编译器只为MyList<T>类型产生“泛型版”的IL代码——并不进行泛型的实例化,T在中间只充当占位符.例如:MyList 类型元数据中显示的<T> 2.执行的时候,当JIT编译器第一次遇到MyList<int>时,将用int替换“范型版”IL代码与元数据中的T—进行泛型类型的实例化.例如 :Main函数中显示的<int> 3.什么是泛型泛型是具有占位符(类型参数)的类.方法.结构.接口 4.泛型类的继承public class F

C#学习之泛型继承和静态成员

想要理解这里有必要先将泛型类学习充分.这里讲解的是泛型类继承类的类型和静态成员. 在前面C#学习之泛型中,创建的LinkList<T>类实现了IEnumerable<T>接口. 即泛型类也可以实现泛型的接口,也可派生自一个类.泛型类也可以派生自泛型基类. public class Base<T> { } public class Derived<T>:Base<T> { } 也可以指定基类的类型,可以执行某些特定操作 public class D

Java编程思想学习(十一) 泛型

1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfaces and methods. 泛型能在定义类,接口和方法时将类型(类和接口)作为参数.和方法声明时的形式参数很类似,都是为了在不同的输入时重用相同的代码.不同的是形式参数输入的是值而泛型是类型. 2.为什么使用泛型 1.编译时更加强的(Stronger)类型检测java编译器对泛型代码进行强类型检

ios开发ios9新特性关键字学习:泛型,逆变,协变,__kindof

一:如何去学习?都去学习什么? 1:学习优秀项目的设计思想,多问几个为什么,为什么要这么设计,这么设计的好处是什么,还能不能在优化 ,如何应用到自己的项目中 2:学习优秀项目的代码风格,代码的封装设计思想,为什么要这么设计,这么设计的好处是什么,还能不能在优化 ,如何应用到自己的项目中,每行代码都要用心去写,每一行代码都要力求使最简洁的 3:学习别人遇到问题是如何分析问题,解决问题的方法是什么 4:遇到新东西应该如何去学习:1:先研究要学习的东西作用是什么 ,有什么好处  2:如何使用:具体的语

关于学习C#泛型委托过程中发现的一些疑惑,大家一起讨论下

大家知道泛型委托Action,是定义一个没有返回值的委托. 例如: public Action<int, int> AddAction = (x, y) => { Console.WriteLine(x+y); }; 定义一个Action 可以在Action上F12进入可以看到源码为: public delegate void Action<T1, T2>(T1 arg1, T2 arg2); 这里发现一个问题,T1,T2是什么类型呢,在哪里定义的,我按F12并没有找到对应的

swift学习笔记-&gt;泛型

如果学过java就知道泛型是什么  比如说定义一个数组  var a : [Int] Int 就是该数组的泛型 创建一个字典也是根据泛型储存内容的 var a : Dictionary <String,String> 而泛型能解决的问题  就像字典一样  他是个不确定的键值对  你定义什么类型就能存什么类型 泛型函数 下面举个例子一个函数  要将两个参数值互换 func myswap(inout a: Int,inout b: Int) { let temp = a a = b b = tem

unity3d中设计模式的学习&lt;一&gt;:泛型单例

单例是游戏开发中比较常见的设计模式,虽然针对的功能不同,但是有一些功能还是共有的,代码也不少,如果能放在一个基类里面是最好不过了,但是单例里需要有个instance功能来返回当前对象,所以这个功能必须是static的,没办法直接继承,之前看了<面向对象的游戏开发>这本书里,使用的是泛型,于是我实验了几次 现在我们就来实现这个较为简单的单例泛型: public class Singleton<T> : MonoBehaviour where T: MonoBehaviour //因为

C#学习之泛型

什么泛型? 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样.将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型.泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念. 为什么要使用泛型? 通常我们在开发的时候会碰到这样的情况:一个方法实现的功能都是一样的(比如说保存一个对象),但是我们传递的参数类型不一样而已,如果按照一般来讲都会去拷贝一份方法把传递的参

C#学习笔记 ----泛型

泛型的优点和缺点: 性能 类型安全 二进制代码的重用 代码的扩展 命名约定(字母T作为前缀) 创建泛型类型,如下: public class LinkedListNode<T> { public LinkedListNode(T value) { this.Value = value; } public T Value{get;private set;} public LinkedListNode<T> Next{get;internal set;} public LinkedLi