<> 中的确切含义 C# 中

本文关键字: | 更新日期: 2023-09-27 18:36:47

我是C#的新手,来自PHP。一切都几乎很清楚,除了我不知道构造接口/集合<>的确切含义。

我已经在"类型定义"中使用<>,但它到底是什么意思。我是这样使用它的:

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

等。你看到任何关于这个的文章吗?请发布链接。谢谢。

<> 中的确切含义 C# 中

它被称为"泛型",它是一种(如你所说)定义类型参数的方法。 以下是有关 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();
    // ...
}

你很可能是指泛型。

标识符<类型定义>

标识符后面的块表示从泛型类型定义构造的类型。

此定义是递归的:您可以拥有从其他泛型类型构造的泛型类型:就像您可以拥有数组数组一样,您可以构造列表列表、字典列表等。

此外,您可以使用类似的构造来构建泛型函数,但不是输入泛型函数的名称或接口名称。

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

如果是集合,它定义集合中将包含哪种类型的数据。它只是一种即兴类型安全性的方法。举个小例子:

ArrayList<Integer> test = new ArrayList<Integer>();
test.Add(1); // will work
test.Add("2");  //will throw an exception, String cannot be cast to int

请阅读其他人提供的有关泛型的文章;不过,我在这里给你一个快速的介绍。

比如说,我们想写一个id函数(准确地返回它的输入)。这应该适用于每种类型,对吧?因此,我们的幼稚方法是使用object

object id(object x) {
    return x
}

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

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

查看类型签名,您可以看到此版本采用任何T并返回相同的T(将T替换为 int ,您将看到)。

我希望这能给你一个快速的概述。另外,请阅读有关约束的信息。

相关文章:
  • 没有找到相关文章