初学者问题泛型与非泛型区别

clleady 2008-11-15 12:47:10
1,泛型和非泛型到底是什么意思?我是初学者,说的简单一点。
2,哪个性能好,体现在哪里,常用哪种?
...全文
558 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
syc958 2008-11-15
  • 打赏
  • 举报
回复
如果你用的好都用成object类型也可以....
cyforever4842 2008-11-15
  • 打赏
  • 举报
回复
泛型效率更高,由Type决定类型

其数据安全性更高,不会产生装箱拆箱的操作

笺香 2008-11-15
  • 打赏
  • 举报
回复
以非泛型方式调用泛型方法 耗时大约是直接泛型调用耗时的三倍
但是在一些特定的场合,非泛型方式调用泛型方法的确没有更好的选择。
笺香 2008-11-15
  • 打赏
  • 举报
回复
泛型在编译时处理
List <E>
你写程序的时候写List <String>
编译的时候就不是用List <Object>了,而是用的String

泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以使它们能够直接用于软件构造。泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据的类型来进行参数化。泛型能在编译时,提供强大的类型检查,减少数据类型之间的显示转换、装箱操作和运行时的类型检查。泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用在集合和在集合上运行的方法中。

泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。

下面的代码示例演示一个用于演示用途的简单泛型链接列表类。(大多数情况下,应使用 .NET Framework 类库提供的 List<(Of <(T>)>) 类,而不是自行创建类。)在通常使用具体类型来指示列表中存储的项的类型的场合,可使用类型参数 T。其使用方法如下:

在 AddHead 方法中作为方法参数的类型。

在 Node 嵌套类中作为公共方法 GetNext 和 Data 属性的返回类型。

在嵌套类中作为私有成员数据的类型。

注意,T 可用于 Node 嵌套类。如果使用具体类型实例化 GenericList<T>(例如,作为 GenericList<T>),则所有的 GenericList<T> 都将被替换为 int。

// type parameter T in angle brackets
public class GenericList<T>
{
// The nested class is also generic on T.
private class Node
{
// T used in non-generic constructor.
public Node(T t)
{
next = null;
data = t;
}

private Node next;
public Node Next
{
get { return next; }
set { next = value; }
}

// T as private member data type.
private T data;

// T as return type of property.
public T Data
{
get { return data; }
set { data = value; }
}
}

private Node head;

// constructor
public GenericList()
{
head = null;
}

// T as method parameter type:
public void AddHead(T t)
{
Node n = new Node(t);
n.Next = head;
head = n;
}

public IEnumerator<T> GetEnumerator()
{
Node current = head;

while (current != null)
{
yield return current.Data;
current = current.Next;
}
}
}

下面的代码示例演示客户端代码如何使用泛型 GenericList<T> 类来创建整数列表。只需更改类型参数,即可方便地修改下面的代码示例,创建字符串或任何其他自定义类型的列表:

class TestGenericList
{
static void Main()
{
// int is the type argument
GenericList<int> list = new GenericList<int>();

for (int x = 0; x < 10; x++)
{
list.AddHead(x);
}

foreach (int i in list)
{
System.Console.Write(i + " ");
}
System.Console.WriteLine("\nDone");
}
}
wangzhe1945 2008-11-15
  • 打赏
  • 举报
回复
举例来说: .NET 系统自带的类库中的 List<T> ;
这是一个典型的泛型,
List<T> 可以实例化为 List<String> list = new List<String>();
List<int> list = new List<int>();
List<byte> list = new List<byte>();

可以使用任何类型。
这就是泛型的奇妙之处,使类不拘泥于特定的类型,实现代码的优雅与重用。
wuyq11 2008-11-15
  • 打赏
  • 举报
回复
使用泛型可以最大限度的重用代码,保护类型的安全以及提高性能
泛型解决了boxing/unboxing和避免了类型转换

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧