準確的說,類不是繼承(inherit)接口,而是實現(implement)接口。.NET 的語言中,類只能繼承自一個類,但是可以實現一個或多個接口。但是也有人認爲說類繼承接口也無傷大雅,但我個人認爲正確的用語可以加深概念理解的正確性。下面用一段代碼解釋繼承和實現的區別:
using System;
public interface ITest
{
}
public class BaseClass
{
}
public class SubClass : BaseClass, ITest
{
}
class AppEntry
{
static void Main(string[] args)
{
Type intType = typeof(ITest);
Type basType = typeof(BaseClass);
Type subType = typeof(SubClass);
Console.WriteLine(subType.IsSubclassOf(basType)); // 輸出 true,因爲 SubClass 是繼承自 BaseClass。
Console.WriteLine(subType.IsSubclassOf(intType)); // 輸出 false,因爲 SubClass 是實現而不是繼承了 ITest(這個結果也說明繼承和實現是有區別的)。
Console.WriteLine(basType.IsAssignableFrom(subType)); // 輸出 true,因爲 SubClass 是繼承自 BaseClass,所以可以將 SubClass 對象賦值給 BaseClass 的變量。
// BaseClass b = new SubClass();
Console.WriteLine(intType.IsAssignableFrom(subType)); // 輸出 true,因爲 SubClass 實現了 ITest 接口,所以可以將 SubClass 對象賦值給 ITest 的變量。
// ITest it = new SubClass();
}
}
注意:類型兼容性測試方法:IsSubclassOf(Type t), 當前類是t的子類型,返回true。
IsAssignableFrom(Type t),當前類與t類型相同 | 當前類是t父類 | 當前類是t實現的接口,返回true。
IsAssignableFrom()用的多,因爲可判斷情況多。