正如汉斯·帕桑特(Hans Passant)所说,物体没有名称。
因此,如果您确实需要名称,则可以将它们作为属性或字段进行介绍。您可以使用CallerMemberNameAttribute自动将呼叫者姓名传递给例如构造函数。
另一件事,对象可能是在Class2
外部创建的,实际上是在Mickey ... Set
设置程序中,您正在从外部某个地方向对象分配mMickey
,因此该对象可能具有不同的名称。我宁愿创建对象的副本,而不仅仅是分配,然后我们可以为其分配任何名称,并且该名称不会与先前的名称冲突。一个示例可能是:
Imports System.Runtime.CompilerServices
Public Class Class1
Private mValore As String
Public ReadOnly Name As String
Public Sub New(mValore As String,<CallerMemberName> Optional callerMemberName As String = Nothing)
Me.mValore = mValore
Me.Name = callerMemberName
End Sub
Public ReadOnly Property Valore As String
Get
Return mValore
End Get
End Property
End Class
Public Class Class2
Private mMickey As Class1
Public Property Mickey As Class1
Get
Return mMickey
End Get
Set(value As Class1)
mMickey = New Class1(mValore:=value.Valore)
End Set
End Property
End Class
,
如果Class2仅具有一个属性,则只需获取 only 属性的名称
Public Class Class1
Public ReadOnly Property Valore As String
Get
Return GetType(Class2).GetProperties().Single().Name
End Get
End Property
End Class
Public Class Class2
Public Property Mickey As Class1
End Class
如果它具有多个属性,则只需获取 first 属性的名称
Public Class Class1
Public ReadOnly Property Valore As String
Get
Return GetType(Class2).GetProperties().First().Name
End Get
End Property
End Class
Public Class Class2
Public Property Mickey As Class1
Public Property Mouse As String
End Class
这将按定义属性的顺序返回第一个属性。因此,如果更改顺序,则会中断。
当然,必须有更多符合条件的信息才能引导我们找到解决方案。我可以假设您只对类型为Class1的属性的名称感兴趣吗?然后,您还可以过滤属性的类型
Public Class Class1
Public ReadOnly Property Valore As String
Get
Return GetType(Class2).GetProperties().Where(Function(pi) pi.PropertyType Is GetType(Class1)).Single().Name
End Get
End Property
End Class
Public Class Class2
Public Property Mouse As String
Public Property Mickey As Class1
End Class
我认为这正是您想要的。但是,如果没有,请告诉我,我们可以解决。
本文链接:https://www.f2er.com/3160097.html