C#学习之泛型
//主函数//主函数里面调用的类都在后面有具体描述
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace GeneralType
{
class Program
{
static void Main(string[] args)
{
LinkedListNode<int> sub = new LinkedListNode<int>();
LinkedListNode<int> sub1 = new LinkedListNode<int>();
LinkedListNode<int> sub2 = new LinkedListNode<int>();
sub.next = sub1;
sub.prev = null;
sub1.prev = sub;
sub1.next = sub2;
sub2.prev = sub1;
sub2.next = null;
LinkedListNode<int> point;
point = sub2;
while(point!=null)
{
string text= point.Value.ToString();
Console.WriteLine(text);
point = point.prev;
}
Console.ReadLine();
//上面是创建节点类的实例,下面是创建了一个链表的实例
var link = new LinkList<int>();
link.Addlast();
link.Addlast();
link.Addlast();
link.Addlast();
foreach(int i in link)
{
Console.WriteLine(i);
}
Console.ReadLine();
return ;
} }
}
//以下是建立了两个类,分别在不同的文件中//LinkedListNode<T>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace GeneralType
{
public class LinkedListNode<T>
{
//创建节点类,对象可以使全部类型
//本类具有值Value 的属性
//值需要在初始化的时候加入,不能再类外部通过其他方式对
//本类一个对象的值赋值
//本类包含两个引用属性,一个是指向本节点在链表中前面的节点,一个是指向后面的节点
//可以在本类中使用
//Internal修饰符是指在本程序集内可以赋值
public LinkedListNode(T value)
{
this.Value=value;
}
public T Value
{
private set;
get;
}
public LinkedListNode<T> prev
{
get;
internal set;
}
public LinkedListNode<T> next
{
get;
internal set;
}
}
}
//LinkList<T>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace GeneralType
{
public class LinkList<T>:IEnumerable<T>
{
//首先先为本类创建两个属性,First and Last
public LinkedListNode<T> First { get; private set; }
public LinkedListNode<T> Last { get; private set; }
//下面的函数式在向建立的链表对象中添加数据
//同时返回这个数据所建立的新的节点对象
public LinkedListNode<T> Addlast(T one)
{
var newnode = new LinkedListNode<T>(one);
if(First==null)
{
First = newnode;
Last = newnode;
First.next = Last;
Last.prev = First;
}
else
{
Last.next = newnode;
newnode.prev = Last;
Last = newnode;
}
return newnode;
}
//通过实现GetEnumerable()方法可以使用foreach 遍历链表
//yield return和yield break 可以多次出现,但是不能用return语句
public IEnumerator<T> GetEnumerator()
{
LinkedListNode<T> current = this.First;
while(current!=null)
{
yield return current.Value;
//Console.WriteLine(current.ToString());
current = current.next;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}
C#学习之泛型的更多相关文章
- C#学习之泛型继承和静态成员
想要理解这里有必要先将泛型类学习充分.这里讲解的是泛型类继承类的类型和静态成员. 在前面C#学习之泛型中,创建的LinkList<T>类实现了IEnumerable<T>接口. ...
- Java 理论和实践: 了解泛型 识别和避免学习使用泛型过程中的陷阱
Brian Goetz (brian@quiotix.com), 首席顾问, Quiotix 简介: JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进.但是,对于初次使用泛 ...
- Java编程思想学习(十一) 泛型
1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfac ...
- Java学习之——泛型
1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfac ...
- ios开发ios9新特性关键字学习:泛型,逆变,协变,__kindof
一:如何去学习?都去学习什么? 1:学习优秀项目的设计思想,多问几个为什么,为什么要这么设计,这么设计的好处是什么,还能不能在优化 ,如何应用到自己的项目中 2:学习优秀项目的代码风格,代码的封装设计 ...
- luogg_java学习_09_泛型_集合
这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 泛型 泛型介绍 1).类内部的属性的类型可以由外部决定: 2) ...
- [.NET自我学习]Delegate 泛型
阅读导航 委托Delegate 泛型 1. 委托Delegate 继承自MulticastDelegate 声明委托定义签名: public delegate int DemoDelegate(int ...
- .net学习之泛型、程序集和反射
一.泛型1.CLR编译时,编译器只为MyList<T>类型产生“泛型版”的IL代码——并不进行泛型的实例化,T在中间只充当占位符.例如:MyList 类型元数据中显示的<T> ...
- 【java基础学习】泛型
泛型 1. 泛型类(声明的泛型类型静态方法不能使用) class Tools<T>{ private T t; public void set(T t){ this.t = t; } pu ...
- 学习Swift -- 泛型
泛型 泛型代码可以让你写出根据自我需求定义.适用于任何类型的,灵活且可重用的函数和类型.它的可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图. 泛型所解决的问题 先来看一个交换两个int ...
随机推荐
- chorme打开网页的技巧
恢复之前关闭的网页 ctr l+ shift + t 打开之前不小心关闭的网页 临时书签 在设置书签中有 为打开的网页添加书签 的选项, 清除地址栏搜索记录 首先需要退出个人谷歌账户,账户上的搜索记录 ...
- 通过流的方式操作hadoop的API
通过流的方式操作hadoop的API 功能: 可以直接用来操作hadoop的文件系统 可以用在mapreduce的outputformat中设置RecordWrite 参考: 概念理解 http:// ...
- ajax的$.get()方法和tomcat服务器的交互
AJAX AJAX = 异步 JavaScript 和 XML. AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. Ajax get()方法 定义和用法 $.get() 方法 ...
- OpenMPI源码剖析2:ompi_mpi_errors_are_fatal_comm_handler函数
上一篇文章说道,初始化失败会有一个函数调用: ompi_mpi_errors_are_fatal_comm_handler(NULL, NULL, message); 所以这里简单地进入了 ompi_ ...
- 在JS中 实现不用中间变量temp 实现两个变量值得交换
1.使用加减法; var a=1; var b=2; a=a+b; b=a-b; a=a-b; 2.使用乘除法(乘除法更像是加减法向乘除运算的映射) var a=1; var b=2; a = a * ...
- C#中委托的发展与匿名函数
匿名函数(C# 编程指南) 匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用. 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. 共有两种匿名函数 ...
- 深入理解Java之数据类型
一.概述 我们通过编程解决一个具体问题时,首先要做的工作是用各种“数据结构”表示问题中的实体对象,而后才能着手研究描述具体业务逻辑的算法.这也正印证了”程序 = 数据结构 + 算法“.而这里的数据结构 ...
- 我爱C语言
各位同志们好,我是来自计算机系的谢畅,我是一个平时看起来高冷其实很逗比的人,我的爱好有很多但只是会一些基础比如游泳,篮球,听听音乐什么的.我的特长是弹吉他虽然弹得不是很溜,我还喜欢朗诵.刚开始我并不是 ...
- SFTPHelper
public class SFTPHelper { #region 字段或属性 private readonly SftpClient _sftp; /// <summary> /// S ...
- idea超炫的自定义模板
idea超炫的自定义模板 idea 有些快捷键 sout -> System.out.println() ,输入sout,idea能自动补全代码, 这种约定的快捷方式大大提高了效率, 而id ...