什么是"<>"在定义方法时?

时间:2017-09-15 09:08:32

标签: c# generics asynchronous

所以我对泛型类和方法有所了解。 但是当我这样看时,它仍然没有得到语法。

private async Task<JsonValue> GetJsonDoc(string url)

3 个答案:

答案 0 :(得分:3)

它定义泛型类型存储,使用或返回的类型(在本例中为Task)。因此,方法GetJsonDoc会返回Task,它会在运行并完成时返回JsonValue

答案 1 :(得分:0)

在您的情况下,<JsonValue>是任务将返回的类型。例如,如果您在此处有<Int32>,则您的任务将返回一个整数值。

阅读here的良好来源。

返回字符串值的一个非常基本的示例:

private static async Task<string> MyNewTask()
    {
        int timer;

        for (timer = 0; timer < 10; timer++)
        {
            Console.WriteLine(timer);
        }

        return "Time left = " + timer;
    }

您可以从上面的示例中看到,作为运行任务的结果,返回了一个字符串值。

在上面的示例中,任务将字符串作为参数,并返回JsonValue类型对象。

希望这有帮助。

答案 2 :(得分:0)

这表示“通用”类。

当类需要包含另一个类的对象时,使用泛型。

例如,List<string>是包含字符串对象的列表对象。

Task<JsonValue>Task,其中Result属性的类型为JsonValue

在引入泛型之前,通过存储类型为“object”的引用来实现功能。这可以在旧的集合类中看到(所以List而不是List<T>)。

与简单地存储对象相比,泛型解决了两个主要缺点:

  1. 无需投射。如果Task不是通用的,则必须使用(JsonDoc)Task.Result。除了输入类型繁琐之外,编译器无法检查它的类型,使其容易出错并且难以重构。
  2. 价值类型的表现。虽然intstring等基本类型可以由object表示,但实际上并不是它们在内存中的表示方式。因此,当它们转换为object或从{{1}}转换时,它需要处理时间和内存。这被称为“拳击”和“拆箱”。
  3. 通常,在进行基本编程时,您不需要创建自己的泛型类 - 您只需使用其他人编写的类。如果您创建将由其他程序员使用的类,那么它可能是一项有用的技能。