[英]Using the generic type parameter vs using its type constraint?
假設我有一個這樣的類結構,其中Foo
類是Base
, Derived1
等類層次結構上的泛型。
abstract class Base {...}
class Derived1 : Base {...}
.
.
.
class Derivedn : Base {...}
class Foo<T> where T : Base
{
/// XXX is a placeholder - see below
void DoBar(XXX arg) {...}
...
}
希望DoBar()
在Base
派生的東西上進行操作, 如果XXX
是Base
或T
有所不同嗎?
約束意味着T
必須是Base
或其子Base
之一; 但在DoBar()
的范圍內, DoBar()
以任何一種方式將其視為Base
類型的對象-因此,從表面上看,這似乎沒有任何區別。 但是我可能忽略了一些更微妙的東西。
如果將xxx
設置為Base
,則方法參數可以是Base
或從Base
派生的任何類。 如果將xxx
設置為T
,則方法參數可以是T
類或從T
派生的任何類。
因此,例如,如果使用通用類型Derived1
實例化Foo
類,則在第一種情況下,您可以使用Base
或從Base
派生的類,在第二種情況下,您只能使用Derived1
或從Derived1
派生的類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.