iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#如何自定义泛型类
  • 573
分享到

C#如何自定义泛型类

2023-06-18 00:06:48 573人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“C#如何自定义泛型类”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#如何自定义泛型类”这篇文章吧。Generic是Framework 2.0的新元素,中文名字称之为“

这篇文章主要为大家展示了“C#如何自定义泛型类”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#如何自定义泛型类”这篇文章吧。

Generic是Framework 2.0的新元素,中文名字称之为“泛型” ,特征是一个带有尖括号的类,比如List< T>

C#自定义泛型类用得最广泛,就是集合(Collection)中。实际上,泛型的产生其中一个原因就是为了解决原来集合类中元素的装箱和拆箱问题(如果对装箱和拆箱概念不明,请百度搜索)。由于泛型的使用,使得集合内所有元素都属于同一类,这就把类型不同的隐患消灭在编译阶段——如果类型不对,则编译错误。

这里只讨论C#自定义泛型类。基本自定义如下:

public class MyGeneric < T>  ...{      private T member;      public void Method (T obj)      ...{      }  }

这里,定义了一个泛型类,其中的T作为一个类,可以在定义的类中使用。当然,要定义多个泛型类,也没有问题。

public class MyGeneric < TKEy, TValue>  ...{       private TKey key;       private TValue value;        public void Method (TKey k, TValue v)       ...{       }  }

泛型的初始化:泛型是需要进行初始化的。使用T doc = default(T)以后,系统会自动为泛型进行初始化。

限制:如果我们知道,这个将要传入的泛型类T,必定具有某些的属性,那么我们就可以在MyGeneric< T>中使用T的这些属性。这一点,是通过interface来实现的。

// 先定义一个interface  public interface IDocument  ...{     string Title ...{get;}     string Content ...{get;}  }   // 让范型类T实现这个interface  public class MyGeneric < T>  where T : IDocument  ...{       public void Method(T v)       ...{            Console.WriteLine(v.Title);       }  }   // 传入的类也必须实现interface  public class Document : IDocument  ...{  ......  }   // 使用这个泛型  MyGeneric< Document> doc = new MyGeneric< Document>();

泛型方法:我们同样可以定义泛型的方法

void Swap< T> (ref T x, ref T y)  ...{  T temp = x;  x = y;  y = temp;  }

泛型代理(Generic Delegate):既然能够定义泛型方法,自然也可以定义泛型代理

public delegate void delegateSample < T> (ref T x, ref T y)   private void Swap (ref T x, ref T y)  ...{      T temp = x;      x = y;      y = temp;  }   // 调用  public void Run()  ...{     int i,j;     i = 3;     j = 5;     delegateSample< int> sample = new delegateSample< int> (Swap);     sample(i, j);  }

设置可空值类型:一般来说,值类型的变量是非空的。但是,Nullable< T>可以解决这个问题。

Nullable< int> x;   // 这样就设置了一个可空的整数变量x  x = 4;  x += 3;  if (x.HasValue)   // 使用HasValue属性来检查x是否为空  ...{ Console.WriteLine ("x="+x.ToString());  }  x = null;    // 可设空值

使用ArraySegment< T>来获得数组的一部分。如果要使用一个数组的部分元素,直接使用ArraySegment来圈定不失为一个不错的办法。

int[] arr = ...{1, 2, 3, 4, 5, 6, 7, 8, 9};  // ***个参数是传递数组,第二个参数是起始段在数组内的偏移,第三个参数是要取连续多少个数  ArraySegment< int> segment = new ArraySegment< int>(arr, 2, 3);  // (array, offset, count)    for (int i = segment.Offset; i< = segment.Offset + segment.Count; i++)  ...{     Console.WriteLine(segment.Array[i]);    // 使用Array属性来访问传递的数组  }

在例子中,通过将Offset属性和Count属性设置为不同的值,可以达到访问不同段的目的。

以上是“C#如何自定义泛型类”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: C#如何自定义泛型类

本文链接: https://www.lsjlt.com/news/294617.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#如何自定义泛型类
    这篇文章主要为大家展示了“C#如何自定义泛型类”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#如何自定义泛型类”这篇文章吧。Generic是Framework 2.0的新元素,中文名字称之为“...
    99+
    2023-06-18
  • 如何将泛型与自定义类型一起使用?
    php小编百草为您介绍如何将泛型与自定义类型一起使用。泛型是一种在编程中常用的技术,它可以使代码更加灵活和可复用。而自定义类型则是根据业务需求,开发者自己定义的数据类型。当我们需要在自...
    99+
    2024-02-09
  • java泛型类如何定义和使用
    Java中定义泛型类的语法为:javapublic class 类名 {// 类的成员变量和方法}其中,泛型参数可以是任意合法的标识...
    99+
    2023-10-18
    java
  • c语言如何自定义结构体类型
    在C语言中,可以使用`typedef`关键字来自定义结构体类型。`typedef`关键字用于为已存在的类型定义一个新的名称。以下是定...
    99+
    2023-09-04
    c语言
  • 将类型定义为泛型类型实例化
    php小编西瓜今天将为大家介绍一个重要的概念——将类型定义为泛型类型实例化。在编程中,泛型是一种灵活的方式,可以在不指定具体类型的情况下,编写通用的代码。通过将类型定义为泛型类型实例化...
    99+
    2024-02-10
  • C#中如何实现自定义类型的转换
    在C#中,我们可以通过实现类型转换运算符(conversion operators)来自定义类型的转换。具体步骤如下: 创建一个自...
    99+
    2024-04-03
    C#
  • VB如何自定义类型参数
    这篇文章主要介绍“VB如何自定义类型参数”,在日常操作中,相信很多人在VB如何自定义类型参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VB如何自定义类型参数”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
  • TypeScript如何自定义数据类型
    这篇文章主要介绍“TypeScript如何自定义数据类型”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“TypeScript如何自定义数据类型”文章能帮助大家解决问题。TypeScript 类型系统和...
    99+
    2023-07-04
  • C语言:自定义类型详解
    目录一、结构体1.结构体变量的定义及初始化2.结构体内存对齐3.为什么要内存对齐呢?二、位段1.什么是位段2.位段的内存分配三、枚举1.枚举的定义2.枚举的优点四、联合(共用体)1....
    99+
    2024-04-02
  • C#如何实现泛型类
    这篇文章主要为大家展示了“C#如何实现泛型类”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#如何实现泛型类”这篇文章吧。使用泛型集合有些人问我"面向对象编程(OOP)的承诺在哪里?&...
    99+
    2023-06-17
  • 怎么在Java中定义泛型类
    本篇文章为大家展示了怎么在Java中定义泛型类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论...
    99+
    2023-06-14
  • c语言string类型如何定义
    在C语言中,可以使用字符数组来表示字符串,并通过数组的最后一个元素设置为'\0'来表示字符串的结束。可以使用以下两种方式定义字符串:...
    99+
    2023-10-28
    c语言
  • C#如何使用delegate类型设计自定义事件
    这篇文章主要介绍C#如何使用delegate类型设计自定义事件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用delegate类型设计自定义事件在C#编程中,除了Method和Property,任何Class都可以...
    99+
    2023-06-04
  • C#快速实现IList非泛型类接口的自定义类作为数据源
    目录一、利用VS的修补程序快速继承IList二、实现必须的成员使用可以绑定数据源的控件我们需要有实现了IList接口的类作为数据源,我们有很多的方法,比如使用ArrayList或者L...
    99+
    2023-02-06
    C# IList数据源
  • 如何定义C++中的C++数据类型
    这篇文章给大家介绍如何定义C++中的C++数据类型,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。着重介绍C++数据类型,C++中的C++数据类型定义编译器在内存中存放信息的方式,在不同的开发环境中,可以向变量赋予任何数...
    99+
    2023-06-17
  • C语言自定义类型全解析
    目录前言结构体类型结构体的声明结构体变量的定义与初始化结构体的自引用结构体的访问结构体的传参传结构体传地址结构体的内存对齐(强烈建议观看)位段位段的声明位段的内存管理位段的跨平台性 ...
    99+
    2024-04-02
  • C语言中自定义类型详解
    目录结构大小offsetof结构体对齐规则存在原因总结结构大小 我们先随便给出一个结构体,为了计算他的大小,我给出完整的打印方案: typedef struct num { cha...
    99+
    2024-04-02
  • C#中怎么定义和使用泛型类和方法
    在C#中,泛型类和方法可以让你编写更加灵活和可复用的代码。以下是如何定义和使用泛型类和方法的示例: 定义泛型类: public cl...
    99+
    2024-03-06
    C#
  • golang如何自定义返回值类型?
    go 语言中可通过创建自定义类型定义函数返回值,增强灵活性,允许返回特定格式或结构的数据。通过 syntax:func functionname() (returntype1, retu...
    99+
    2024-04-23
    golang 自定义返回值类型
  • c语言中byte类型如何定义
    在C语言中,没有直接定义byte类型的关键字,但可以使用unsigned char类型来表示一个字节大小的数据。具体定义方式如下: ...
    99+
    2023-10-24
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作