C#泛型、使用泛型构建简单的二叉树类、泛型方法、可变性和泛型接口、协变接口、逆变接口

泛型解决方案

C# 通过泛型避免强制类型转换,增强类型安全性,减少装箱量.泛型类和方法接受类型参数.它们指定了要操作的对象的类型
如下所示:

class Queue<T>
{
   
	...
}

T就是类型参数,作为占位符使用,会在编译时被真正的类型取代.写代码实例化泛型Queue时,需要指定用于取代T的类型,在类中定义字段和方法时,也可以用同样的占位符指定这些项的类型.
在这里插入图片描述
类型参数不一定是简单类或值类型。比如,可以创建由整数队列构成的队列:

在这里插入图片描述
泛型类还可以指定多个类型的参数,比如Dictionary
在这里插入图片描述

对比泛型类和常规类

每次为泛型类指定类型参数时,实际都会造成编译器生成一个全新的类.它"恰好"具有泛型类定义的功能.可以想象泛型类定义了一个模板,编译器根据实际情况用该模板生成新的、有具体类型的类.

泛型和约束

有时候要确保泛型使用的类型参数是提供了特定方法的类型,这时可用约束来规定该条件.

比如:

    class Queue<T> where T: IPrintable
    {
   

    }

这样用于替换T的类型必须实现了IPrintable接口,如果没有则会造成编译错误.

下面是一个使用泛型的简单二叉树类

    public class Tree<TItem> where TItem: IComparable<TItem>
    {
   
        public TItem NodeData {
    get; set; }
        public Tree<TItem> LeftTree {
    get; set; }
        public Tree<TItem> RightTree {
    get; set; }

        public Tree(TItem nodeValue) //构造器名称不能包含类型参数,它名为Tree
        {
   
            this.NodeData = nodeValue;
            this.LeftTree = null;
            this.RightTree = null;
        }
        public void Insert(TItem newItem)
        {
   
            TItem currentNodeValue = this.NodeData;
            if(currentNodeValue.CompareTo(newItem
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值