1.判斷是否實現了指定接口ide
添加測試類:測試
1 public class TestClass2 : TestClass1 2 { 3 4 } 5 public class TestClass1 : TestClass0 6 { 7 public override void TestMethod() 8 { 9 10 } 11 } 12 public class TestClass0 : ITestInterface 13 { 14 public virtual void TestMethod() 15 { 16 17 } 18 } 19 20 public interface ITestInterface 21 { 22 }
//true
var hasInterface = typeof(TestClass2).GetInterfaces().Any(i => i.Name == nameof(ITestInterface));
2.判斷是否繼承了指定基類spa
//true
var isSubOfTestClassBase = typeof(TestClass2).IsSubclassOf(typeof(TestClass0));
3.判斷是否重寫了基類方法code
獲取指定方法的信息後,能夠經過DeclaringType-聲明此方法的成員類信息,判斷與當前類信息是否一致。blog
//false
var hasTestClass2OverrideMethod = typeof(TestClass2).GetMethod(nameof(TestClass0.TestMethod)).DeclaringType.Equals(typeof(TestClass2));
//true
var hasTestClass1OverrideMethod = typeof(TestClass1).GetMethod(nameof(TestClass0.TestMethod)).DeclaringType.Equals(typeof(TestClass1));
以上,也能夠使用IsAssignableFrom來統一判斷繼承
1 /// <summary> 2 /// MainWindow.xaml 的交互邏輯 3 /// </summary> 4 public partial class MainWindow : Window 5 { 6 public MainWindow() 7 { 8 InitializeComponent(); 9 var isTypeOfExportMetadata = typeof(IB).IsAssignableFrom(typeof(A)); 10 } 11 } 12 13 internal class A : IA 14 { 15 16 } 17 interface IA:IB 18 { 19 20 } 21 22 interface IB 23 { 24 25 }
1. 判斷類A是否爲類B的嵌套類接口
public class TestClass { public class TestNestedClass { } }
測試:it
//true
var isNestedInTestClass= typeof(TestClass).GetNestedTypes().Any(i=>i.Equals(typeof(TestClass.TestNestedClass)));
2. 類/接口的訪問類型event
經過以下訪問類型的組合,進行判斷class