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

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

 //第一个节点类,放在一个文件中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace CommonGeneral
{
//编写节点类,类型为object(在c#中所有的类型都是object 类的派生类)
//可以向本类中添加任何类型的值
//本类具有的属性是next,prev,Value
public class LinkNode
{
public LinkNode(object value)
{
this.Value = value;
} public object Value
{
get;
private set;//设置成private将不允许在类外用直接向本属性赋值
//只允许在对象的初始化时赋值
}
public LinkNode next
{
get;
internal set;//internal修饰符约定在本程序集内的任何其他函数模块中
//都可以对它赋值。
}
public LinkNode prev
{
get;
internal set;
}
}
}
//第二个类,是对第一个类的调用和存取,建立链表,
//单独放在一个文件家中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace CommonGeneral
{
//IEnumberable接口是System.Collections命名空间下的一个程序接口
//下面是这个接口的函数
/*
namespace System.Collections
{
// 摘要:
// 公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
public interface IEnumerable
{
// 摘要:
// 返回一个循环访问集合的枚举数。
//
// 返回结果:
// 一个可用于循环访问集合的 System.Collections.IEnumerator 对象。
[DispId(-4)]
IEnumerator GetEnumerator();
}
}
*/
class BigList:IEnumerable
{
public LinkNode Last { get; private set; }
public LinkNode First { get; private set; }
public LinkNode AddLast(object value)
{
var newnode = new LinkNode(value);
if(First==null)
{
First = newnode;
Last = newnode;
Last.next = null;
Last.prev = null;
}
else
{
Last.next = newnode;
newnode.prev = Last;
Last = newnode;
}
return newnode;
}
public IEnumerator GetEnumerator()
{
LinkNode current = First;
while(current!=null)
{
yield return current.Value;
current = current.next;
}
}
/* IEnumerator IEnumerable.GetEnumberator()
{
return GetEnumberator();
}*/
}
} //------------主函数---------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CommonGeneral
{
class Program
{
static void Main(string[] args)
{
BigList list = new BigList();
list.AddLast();
list.AddLast("nihao");
list.AddLast(true);
list.AddLast("Any type value can add into this set");
foreach(var value in list)
{
Console.WriteLine(value.ToString());
}
Console.ReadKey();
return;
}
}
}

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

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

    想要理解这里有必要先将泛型类学习充分.这里讲解的是泛型类继承类的类型和静态成员. 在前面C#学习之泛型中,创建的LinkList<T>类实现了IEnumerable<T>接口. ...

  2. Java 理论和实践: 了解泛型 识别和避免学习使用泛型过程中的陷阱

    Brian Goetz (brian@quiotix.com), 首席顾问, Quiotix 简介: JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进.但是,对于初次使用泛 ...

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

    1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfac ...

  4. Java学习之——泛型

    1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfac ...

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

    一:如何去学习?都去学习什么? 1:学习优秀项目的设计思想,多问几个为什么,为什么要这么设计,这么设计的好处是什么,还能不能在优化 ,如何应用到自己的项目中 2:学习优秀项目的代码风格,代码的封装设计 ...

  6. luogg_java学习_09_泛型_集合

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 泛型 泛型介绍 1).类内部的属性的类型可以由外部决定: 2) ...

  7. [.NET自我学习]Delegate 泛型

    阅读导航 委托Delegate 泛型 1. 委托Delegate 继承自MulticastDelegate 声明委托定义签名: public delegate int DemoDelegate(int ...

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

    一.泛型1.CLR编译时,编译器只为MyList<T>类型产生“泛型版”的IL代码——并不进行泛型的实例化,T在中间只充当占位符.例如:MyList 类型元数据中显示的<T> ...

  9. 【java基础学习】泛型

    泛型 1. 泛型类(声明的泛型类型静态方法不能使用) class Tools<T>{ private T t; public void set(T t){ this.t = t; } pu ...

  10. 学习Swift -- 泛型

    泛型 泛型代码可以让你写出根据自我需求定义.适用于任何类型的,灵活且可重用的函数和类型.它的可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图. 泛型所解决的问题 先来看一个交换两个int ...

随机推荐

  1. Python3 小工具-MAC泛洪

    from scapy.all import * import optparse def attack(interface): pkt=Ether(src=RandMAC(),dst=RandMAC() ...

  2. 各类4G手机进入工参模式查看手机信息

    随着移动4G正式商用,LTE网络建设日益完善,LTE用户日趋增多,通过进入其工程模式读取服务小区电平RSRP.物理小区标识PCI和频点号等基本信息的方式来判断测试点信号质量的优劣.由于市场上商用终端品 ...

  3. Python中的global和nonlocal

    在Python中,一个变量的scope范围从小到大分成4部分:Local Scope(也可以看成是当前函数形成的scope),Enclosing Scope(简单来说,就是外层函数形成的scope), ...

  4. Python的string模块化方法

    Python 2.X中曾经存在过一个string模块,这个模块里面有很多操作字符串的方法,但是在Python 3.X中,这些模块化方法已经被移除了(但是string模块本身没有被移除,因为它还有其他可 ...

  5. poj 3009 (深搜求最短路)

    题目大意就是求在特定规则下的最短路,这个规则包含了消除障碍的操作.用BFS感觉选择消除障碍的时候不同路径会有影响,用DFS比较方便状态的还原(虽然效率比较低),因此这道题目采用DFS来写. 写的第一次 ...

  6. hexo设置permalink-避免url中出现中文

    hexo博客初始化的url是年月日+题目:year/:month/:day/:title/,这样的url不便与分享,中文会乱吗,而且一旦修改了题目(我相信大部分人的题目都是中文)就会导致之前分享的ur ...

  7. Java线程模型

    并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Java里面谈论并发,大多数都与线程脱不开关系. 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开, ...

  8. usebean 使用语法

  9. CS6的安装与破解

    大家在Mac下肯定也少不了对图片进行修改,那也就少不了Photoshop这款软件. 今天在这里分享下苹果下的Adobe PhotoshopCS6,这个软件大家应该都很熟悉,主要功能什么我就不多做介绍了 ...

  10. [NOIP2016]愤怒的小鸟 状态压缩dp

    题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形 ...