java generics wiki_什么是C#中的泛型?(What are generics in C#? [closed])

什么是C#中的泛型?(What are generics in C#? [closed])

什么是C#中的泛型,用一个简单的例子来说明? 这个主题有哪些相关文章或网站?

What are generics in C#, illustrated with a simple example? What are some related articles or websites for this topic?

原文:https://stackoverflow.com/questions/4560890

更新时间:2019-06-09 15:05

最满意答案

泛型是指为类编写代码而不指定类所处理的数据类型的技术。

您在声明通用类的实例时指定数据类型。 这允许泛型类专用于许多不同的数据类型,而只需要编写一次类。

一个很好的例子是.NET中的许多集合类。 每个集合类都有它自己的如何创建和管理集合的实现。 但他们使用泛型让他们的课程能够处理任何类型的集合。

Generics refers to the technique of writing the code for a class without specifying the data type(s) that the class works on.

You specify the data type when you declare an instance of a generic class. This allows a generic class to be specialized for many different data types while only having to write the class once.

A great example are the many collection classes in .NET. Each collection class has it's own implementation of how the collection is created and managed. But they use generics to allow their class to work with collections of any type.

2016-04-28

相关问答

泛型是指为类编写代码而不指定类所处理的数据类型的技术。 您在声明通用类的实例时指定数据类型。 这允许泛型类专用于许多不同的数据类型,而只需要编写一次类。 一个很好的例子是.NET中的许多集合类。 每个集合类都有它自己的如何创建和管理集合的实现。 但他们使用泛型让他们的课程能够处理任何类型的集合。 http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx Generics refers to the technique of writi

...

我学到的最重要的事情之一是,你可以约束泛型类型参数 。 这可以是非常强大的,允许您只为特定类型的对象定制类,并允许您在泛型类中使用该类型的成员。 我意识到这是非常基础的,但它是使泛型非常有用的事情之一。 One of the most important things I've learned is that you can constrain the generic type parameter(s). This can be very powerful, allowing you to tak

...

您可以将C ++模板视为伪装成泛型系统的解释性功能性编程语言。 如果这不会吓倒你,它应该:) C#泛型非常有限; 您可以在一个或多个类型上对类进行参数化,并在方法中使用这些类型。 因此,以MSDN为例,您可以这样做: public class Stack

{

T[] m_Items;

public void Push(T item)

{...}

public T Pop()

{...}

}

现在你可以声明一个Stack或者Stack

...

streloksi的链接在打破差异方面做得很好。 快速而肮脏的总结虽然是... 在语法和用法方面。 语言之间的语法大致相同。 这里有一些怪癖(最引人注目的是约束)。 但基本上如果你可以读一个,你可能会读/使用另一个。 最大的区别在于实现。 Java使用类型擦除的概念来实现泛型。 简而言之,底层编译的类实际上并不是通用的。 他们编译成Object和casts。 实际上,Java泛型是一个编译时工件,可以在运行时轻松地被颠覆。 另一方面,C#凭借CLR,实现泛型,直到字节码。 为了支持2.0中的泛型,

...

我会添加我的声音的噪音,并采取刺,使事情明确: C#泛型允许你声明这样的东西。 List foo = new List();

然后编译器将阻止您将不是Person东西放入列表中。 在幕后,C#编译器正在将List放入.NET dll文件中,但是在运行时,JIT编译器会创建一组新的代码,就像您已经编写了一个专门用于包含人员的列表类像ListOfPerson 。 这样做的好处就是它使得它真的很快。 没有任何投射或任何其他的东西,因为dll包含这是一个P

...

试试这个没有LINQ的例子: public void RemoveChild(T child)

{

TreeNode node = null;

foreach (var childNode in _children)

{

if (childNode.Item.Equals(child))

{

node = childN

...

这是一个相当大的问题,说实话 - 最大的区别不在于语法,而在于行为......在这一点上,他们真的非常不同。 我建议你阅读Sun的泛型教程和Angelika Langer的Java泛型常见问题解答 。 尽管从C#/ .NET首先尽可能地忘掉你对泛型的所有知识。 具体来说,尽管.NET泛型类型在执行时保留了类型参数,但Java泛型并不是由于类型擦除 。 换句话说,在C#中,您可以编写: public class GenericType

{

public void DisplayType

...

这是一个非常广泛的主题,可以通过以下方式更好地解释: http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx 要sumarize(来自上面链接的MSDN文章): C#泛型不提供与C ++模板相同的灵活性。 例如,虽然可以调用用户定义的运算符,但不可能在C#泛型类中调用算术运算符。 C#不允许非类型模板参数,例如模板C {}。 C#不支持显式专业化; 也就是说,特定类型的模板的自定义实现。 C#不支持部分特化:类型参数子集的自定义实现。 C#不允许

...

在.NET中阅读泛型约束。 具体而言,由于EntityCollection不能存储值类型(C#结构体),因此需要“where T:class”约束,但不受约束的T可包含值类型。 您还需要添加一个约束来说明T必须实现IEntityWithRelationships,同样是因为EntityCollection要求它。 这导致了诸如: public static EntityCollection Convert(List listToConvert) where T : class,

...

这是一个非常不错的文章。 http://www.jprl.com/Blog/archive/development/2007/Aug-31.html 从那个来源 使用“”中的“迷你表达式语言”指定Java类型和方法约束,声明泛型类型参数。 对于具有约束的每个类型参数,语法为: TypeParameter ListOfConstraints

ListOfConstraints是'&' - 以下约束之一的分隔列表: 使用以下命令在Generic Type Argument上指定基类或实现

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值