簡體   English   中英

使用泛型類型參數還是使用其類型約束?

[英]Using the generic type parameter vs using its type constraint?

假設我有一個這樣的類結構,其中Foo類是BaseDerived1等類層次結構上的泛型。

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派生的東西上進行操作, 如果XXXBaseT有所不同嗎?

約束意味着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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM