元屬性繼承可使用IsDefined函數進行判斷,先寫出結論
若是使用Overrides,則元屬性能夠繼承,除非在使用IsDefined時明確不進行繼承判斷,如
pFunction.IsDefined(GetType(DisplayNameAttribute), False)
若是使用Overloads,則元屬性不能繼承,
以下爲測試源碼:
Sub Main() 'Dim s As New S3() 's.Method() 'CType(s, S2).Method() 'CType(s, S1).Method() Dim pFunction As MethodInfo = GetType(S2).GetMethod("Method") If (pFunction.IsDefined(GetType(DisplayNameAttribute), False)) Then Console.WriteLine("DisplayName") Else Console.WriteLine("No DisplayName") End If Console.ReadLine() End SubEnd ModuleClass S1 <DisplayName("s1")> Public Overridable Sub Method() Console.WriteLine("這是S1實例方法") End SubEnd ClassClass S2 Inherits S1 Public Overrides Sub Method() Console.WriteLine("這是S2實例方法") End SubEnd ClassClass S3 Inherits S2 'Public Overloads Sub Method() ' Console.WriteLine("這是S3實例方法") 'End SubEnd Class