使用泛型方法的目的,其中泛型是一些基础 class
The purpose of using generic methods where generic is some base class
在 T generic 是基础 class 的情况下使用泛型方法是否有任何目的?例如
class A: BaseClass
{
}
class B : BaseClass
{
}
class C
{
public T test<T> (T aa) where T : BaseClass
{
}
}
为什么不直接这样写呢?
class C
{
public BaseClass test (BaseClass aa)
{
}
}
是什么让我们在这种情况下具有通用性?
请注意您的方法 returns 是 T
.
的一个实例
使用泛型,这是有效的:
A input = new A();
A output = c.test(input);
如果我们尝试对仅使用 BaseClass
的版本执行相同操作:
A input = new A();
A output = c.test(input); // Error: can not assign instance of 'BaseClass' to 'A'
这显然是因为 test
returns BaseClass
的一个实例。相反,我们必须写:
A input = new A();
A output = (A)c.test(input);
... 我们没有任何编译时保证 test
实际上 returns 在这种情况下 A
的实例,而不是 [= 的实例19=].
您的(非泛型)变体返回一个 BaseClass 类型的对象,而泛型变体返回一个 T 是什么类型的对象(即 A 或 B 或 BaseClass)。
在 T generic 是基础 class 的情况下使用泛型方法是否有任何目的?例如
class A: BaseClass
{
}
class B : BaseClass
{
}
class C
{
public T test<T> (T aa) where T : BaseClass
{
}
}
为什么不直接这样写呢?
class C
{
public BaseClass test (BaseClass aa)
{
}
}
是什么让我们在这种情况下具有通用性?
请注意您的方法 returns 是 T
.
使用泛型,这是有效的:
A input = new A();
A output = c.test(input);
如果我们尝试对仅使用 BaseClass
的版本执行相同操作:
A input = new A();
A output = c.test(input); // Error: can not assign instance of 'BaseClass' to 'A'
这显然是因为 test
returns BaseClass
的一个实例。相反,我们必须写:
A input = new A();
A output = (A)c.test(input);
... 我们没有任何编译时保证 test
实际上 returns 在这种情况下 A
的实例,而不是 [= 的实例19=].
您的(非泛型)变体返回一个 BaseClass 类型的对象,而泛型变体返回一个 T 是什么类型的对象(即 A 或 B 或 BaseClass)。