Type.IsSubclassOf(Type) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
public:
virtual bool IsSubclassOf(Type ^ c);
public virtual bool IsSubclassOf (Type c);
[System.Runtime.InteropServices.ComVisible(true)]
public virtual bool IsSubclassOf (Type c);
abstract member IsSubclassOf : Type -> bool
override this.IsSubclassOf : Type -> bool
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member IsSubclassOf : Type -> bool
override this.IsSubclassOf : Type -> bool
Public Overridable Function IsSubclassOf (c As Type) As Boolean
參數
- c
- Type
要與目前的類型比較的類型。
傳回
如果目前 true
衍生自 Type
,則為 c
,否則為 false
。 如果 false
和目前 c
相等,這個方法也會傳回 Type
。
實作
- 屬性
例外狀況
c
為 null
。
範例
下列範例會建立名為 Class1
的類別,以及名為 的 DerivedC1
衍生類別。 它會呼叫 IsSubclassOf 方法,以顯示 DerivedC1
為 的 Class1
子類別。
using System;
public class Class1 { }
public class DerivedC1 : Class1 { }
class IsSubclassTest
{
public static void Main()
{
Console.WriteLine("DerivedC1 subclass of Class1: {0}",
typeof(DerivedC1).IsSubclassOf(typeof(Class1)));
}
}
// The example displays the following output:
// DerivedC1 subclass of Class1: True
type Class1() = class end
type DerivedC1() = inherit Class1()
printfn $"DerivedC1 subclass of Class1: {typeof<DerivedC1>.IsSubclassOf typeof<Class1>}"
// The example displays the following output:
// DerivedC1 subclass of Class1: True
Public Class Class1
End Class
Public Class DerivedC1 : Inherits Class1
End Class
Public Module Example
Public Sub Main()
Console.WriteLine("DerivedC1 subclass of Class1: {0}",
GetType(DerivedC1).IsSubClassOf(GetType(Class1)))
End Sub
End Module
' The example displays the following output:
' DerivedC1 subclass of Class1: True
備註
您可以呼叫 IsSubclassOf 方法來判斷下列任一項:
某個類別是否衍生自另一個類別。
類型是否衍生自 ValueType 。 不過, IsValueType 是判斷類型是否為實值型別的更有效率的方式。
類型是否為委派,亦即,不論其是否衍生自 Delegate 或 MulticastDelegate 。
IsSubclassOf方法無法用來判斷介面是否衍生自另一個介面,或是類別是否實作介面。 IsAssignableFrom請使用 方法做為該用途,如下列範例所示。
using System;
public interface IInterface
{
void Display();
}
public class Implementation : IInterface
{
public void Display()
{
Console.WriteLine("The implementation...");
}
}
public class Example
{
public static void Main()
{
Console.WriteLine("Implementation is a subclass of IInterface: {0}",
typeof(Implementation).IsSubclassOf(typeof(IInterface)));
Console.WriteLine("IInterface is assignable from Implementation: {0}",
typeof(IInterface).IsAssignableFrom(typeof(Implementation)));
}
}
// The example displays the following output:
// Implementation is a subclass of IInterface: False
// IInterface is assignable from Implementation: True
type IInterface =
abstract Display : unit -> unit
type Implementation() =
interface IInterface with
member _.Display() = printfn "The implementation..."
printfn $"Implementation is a subclass of IInterface: {typeof<Implementation>.IsSubclassOf typeof<IInterface>}"
printfn $"IInterface is assignable from Implementation: {typeof<IInterface>.IsAssignableFrom typeof<Implementation>}"
// The example displays the following output:
// Implementation is a subclass of IInterface: False
// IInterface is assignable from Implementation: True
Public Interface IInterface
Sub Display()
End Interface
Public Class Implementation : Implements IInterface
Public Sub Display() _
Implements IInterface.Display
Console.WriteLine("The implementation...")
End Sub
End Class
Module Example
Public Sub Main()
Console.WriteLine("Implementation is a subclass of IInterface: {0}",
GetType(Implementation).IsSubclassOf(GetType(IInterface)))
Console.WriteLine("IInterface is assignable from Implementation: {0}",
GetType(IInterface).IsAssignableFrom(GetType(Implementation)))
End Sub
End Module
' The example displays the following output:
' Implementation is a subclass of IInterface: False
' IInterface is assignable from Implementation: True
如果目前的 Type 代表泛型型別或泛型方法定義中的型別參數,則會衍生自其類別條件約束,如果類別條件約束沒有類別條件約束,則衍生自 System.Object 。
注意
除了搭配介面使用時, IsSubclassOf 是 的相反。 IsAssignableFrom 也就是說,如果 t1.IsSubclassOf(t2)
是 true
,則 t2.IsAssignableFrom(t1)
也是 true
。
這個方法可由衍生類別覆寫。