gpt4 book ai didi

c# - 基类和条件泛型之间的区别

转载 作者:太空狗 更新时间:2023-10-29 21:33:59 26 4
gpt4 key购买 nike

我在使用泛型一段时间后注意到这之间没有太大区别:

public void DoSomething<T>(T t) where T : BaseClass{

}

还有这个:

public void DoSomething(BaseClass t){

}

到目前为止我看到的唯一区别是第一个方法可以添加其他约束,如接口(interface)或new(),但如果你按照我写的方式使用它,我看不出太大区别。任何人都可以指出选择一个或另一个的任何重要因素吗?

最佳答案

我认为最明显的区别是方法内部参数的类型会有所不同 - 在通用情况下实际类型,非通用 - 总是 BaseClass .

当您需要调用其他泛型类/方法时,此信息很有用。

 class Cat : Animal {}

void DoSomething<T>(T animal) where T:Animal
{
IEnumerable<T> repeatGeneric = Enumerable.Repeat(animal, 3);
var repeatGenericVar = Enumerable.Repeat(animal, 3);
}
void DoSomething(Animal animal)
{
IEnumerable<Animal> repeat = Enumerable.Repeat(animal, 3);
var repeatVar = Enumerable.Repeat(animal, 3);
}

现在如果你用 new Cat() 调用两者:

  • 两者的类型 repeatGenericrepeatGenericVar将是 IEnumerable<Cat> (注意 var 静态查找类型,显示为突出事实类型是静态已知的)
  • 两者的类型 repeatrepeatVar将是 IEnumrable<Animal>尽管Cat被通过了。

关于c# - 基类和条件泛型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21450819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com