文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#泛型编的实例讲解

2023-06-17 23:29

关注

本篇内容介绍了“C#泛型编的实例讲解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

C# 泛型编程实例:

using System;   using System.Collections.Generic;   using System.Text;   namespace GenericTest   {    class Program    {   static void Main(string[] args)   {    //使用string,int来实例化Test类    Test t = new Test("SHY520",22);    //调用泛型类中的方法    t.SetValue();   }    }    ///    /// 定义一个泛型类,该类有两个类型参数,分别是T,S    ///    /// 类型参数   /// 类型参数    public class Test    {   //泛型类的类型参数可用于类成员   private T name;   private S age;   public Test(T Name,S Age)   {    this.name = Name;    this.age = Age;   }   public void SetValue()   {    Console.WriteLine(name.ToString());    Console.WriteLine(age.ToString());   }    }   }

上面的C# 泛型编程例子不是很恰当,目的是让初学C# 泛型的你了解一下泛型的定义及实例化方法,如上,我们定义了一个泛型类,那么如何实现泛型类的继承呢?这里需要满足下面两点中的任何一点即可:

C# 泛型类继承中,父类的类型参数已被实例化,这种情况下子类不一定必须是C# 泛型类;

父类的类型参数没有被实例化,但来源于子类,也就是说父类和子类都是泛型类,并且二者有相同的类型参数;

//如果这样写的话,显然会报找不到类型T,S的错误   public class TestChild : Test { }   //正确的写法应该是   public class TestChild : Test{ }   public class TestChild : Test { }   public class TestChild : Test { }

接着我们来看看泛型接口,其创建以及继承规则和上面说的泛型类是一样的,看下面的代码:

public interface IList   {    T[] GetElements();   }   public interface IDictionary   {    void Add(K key, V value);   }   // 泛型接口的类型参数要么已实例化   // 要么来源于实现类声明的类型参数   class List : IList, IDictionary   {    public T[] GetElements() { return null; }    public void Add(int index, T value)    {}   }

在来看一下C# 泛型委托,首先我们定义一个类型参数为T的委托,然后在类中利用委托调用方法:

using System;   using System.Collections.Generic;   using System.Text;   namespace GenericTest   {    //定义一个委托,类型参数为T,返回值类型T    //泛型委托支持在返回值和参数上应用类型参数   delegate string GenericDelete(T value);    class test    {   static string F(int i) { return "SHY520"; }   static string G(string s) { return "SHY520"; }   static void Main(string[] args)   {    GenericDelete G1 = G;    GenericDelete G2 = new GenericDelete(F);   }    }   }

我们再来看C# 泛型方法,C#的泛型机制只支持在方法申明上包含类型参数,也即是泛型方法。特别注意的是,泛型不支持在除了方法以外的其他类/接口成员上使用类型参数,但这些成员可以被包含在泛型类型中,并且可以使用泛型类型的类型参数。还有一点需要说的就是,泛型方法可以在泛型类型中,也可以存在于非泛型类型中。下面我们分别看一下泛型类型的申明,调用,重载和覆盖。

using System;   using System.Collections.Generic;   using System.Text;   namespace GenericTest   {    class GenericClass    {   //申明一个泛型方法   public T getvalue(T t)   {    return t;   }   //调用泛型方法   //注意:在调用泛型方法时,对泛型方法的类型参数实例化   public int useMethod()   {    return this.getvalue(10);   }   //重载getvalue方法   public int getvalue(int i)   {    return i;   }    }    //下面演示覆盖    //要注意的是,泛型方法被覆盖时,约束被默认继承,不需要重新指定约束关系    abstract class Parent    {   public abstract K TEST(K k, V v) where K : V;    }    class Child : Parent    {   public override T TEST(T t, S s)   {    return t;   }    }   }

“C#泛型编的实例讲解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯