究竟是什么意思<>在C#?

时间:2012-06-12 05:59:16

标签: c# .net generics

我是C#的新手,来自PHP。一切都很清楚,除了我不知道究竟是什么意思构造接口/集合<>

我已经在使用<>对于“类型定义”,但它究竟意味着什么。我这样使用它:

class TaskComparer : IEqualityComparer<Task> ...
class TaskQueue : ConcurrentQueue<Task> ...

等。你有没有看到关于这个的文章?请发布链接。谢谢。

5 个答案:

答案 0 :(得分:5)

它被称为“泛型”,它是(如你所说)定义类型参数的一种方式。以下是关于MSDN的介绍性文章:http://msdn.microsoft.com/en-us/library/ms172192.aspx

作为此实用程序的一个简单示例,请考虑存储库模式。

public interface IRepository<T> {
    public void Add (T obj);
    public IEnumerable<T> GetAll();
}

通过正确的实现,现在您可以为任何类型的实体建立存储库接口。

public void someMethod(IRepository<Person> personsRepo) 
{
    IEnumerable<Person> persons = personsRepo.GetAll();
    // ...
}

答案 1 :(得分:2)

你很可能意味着generics

答案 2 :(得分:2)

标识符 < 类型定义 >

标识符表示从generic type definition构建的类型后的

块。

这个定义是 recursive :你可以拥有从其他泛型类型构造的泛型类型:就像你可以拥有数组数组一样,你可以构建列表列表,字典列表,等等。

此外,您可以使用类似的结构构建泛型函数,除了您输入泛型函数名称的类型或接口名称。

您可以构建自己的泛型类型和函数定义,并直接或通过反射访问它们。这个概念非常强大,因为它将强类型扩展为从其他类型构建的类型。

答案 3 :(得分:0)

如果是集合,它会定义集合内部的数据类型。它只是一种压缩类型安全性的方法。一个小例子:

ArrayList<Integer> test = new ArrayList<Integer>();

test.Add(1); // will work
test.Add("2");  //will throw an exception, String cannot be cast to int

答案 4 :(得分:0)

阅读其他人提供的关于仿制药的文章;不过,我在这里给你一个简短的介绍。

说,我们想写一个id函数(返回它的输入)。这应该适用于所有类型,对吗?所以,我们天真的方法是使用object

object id(object x) {
    return x
}

但是,每次都会返回一个object - 您必须事后转换才能取回“具体”类型,如下所示:int x = (int)id(12)。泛型解决了这个问题。它们允许您对类型进行参数化以使其完全相同

T id2<T> (T x) {
    return x
}

查看类型签名,您可以看到此版本需要任何 T并返回相同的 T(替换{{1与} T,你会看到)。

我希望能为您提供快速概述。另外,请阅读有关约束的内容。