我有这样的班级结构,
public class a
Protected Friend Property ID() As Integer
Get
Return _Id
End Get
Set(ByVal Value As Integer)
_Id = Value
End Set
End Property
//some other properties and methods
End class
public class b
Inherits a
//some properties and methods
End Class
public class c
Inherits b
//some properties and methods
End Class
public class d
Inherits c
//some properties and methods
Dim obj as D = new D();
Dim data = obj.GetType().GetProperties(/*I have tried all binding flags here*/)
End Class
我想从的对象访问ID
属性。直到现在,我用谷歌搜索并从堆栈中找到了很多答案,但是这些答案中的任何一个都没有给我我想要的东西。class a
Class D
当我使用类似的代码时,我会获得该属性,
'obj.GetType().BaseType.BaseType.BaseType.GetProperties()'
但是重复性BaseType
属性的使用看起来不太好,而且如果将来在两者之间添加更多继承,也可能会引起问题。所以有什么办法可以避免这种情况,并得到我想要的。如有任何混淆,请随时发表评论。
PS-我已经尝试过很多有关此问题的答案,但无法获得我想要的。如果您知道C#的方式,那么也建议我将其转换为VB。
我创建了一个Sub
在d
:
Sub DoStuff()
Dim obj As d = New d()
Dim data = obj.GetType().GetProperties(BindingFlags.Instance Or BindingFlags.NonPublic)
End Sub
当我跨过这data
条线时,data
将其设置为包含单个属性的数组-类中的EntityID
属性a
。
或者,如果我们不想搜索该数组,则可以直接转到该属性:
Dim eid = obj.GetType().GetProperty("EntityID", _
BindingFlags.Instance Or BindingFlags.NonPublic)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句