我有一个课,我想做一个自定义的'toString'函数;
use DateTime;
use DateTime::Format::Strptime;
my $parser = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%dT%H:%M:%S%z',
);
my $date = '2019-02-28T08:42:57+0000';
my $dt = $parser->parse_datetime($date);
say $dt->strftime('%Y/%m/%d');
我希望它自动显示具有当前实例值的所有属性。但是我不知道如何在不专门输入属性的情况下获取属性的值。有动态的方法吗?
答案 0 :(得分:3)
Type.GetMembers
返回一个MemberInfo
对象的列表,该类型的每个成员一个。但是,并非所有成员都有价值观。字段和属性具有值,因此,如果仅获取字段或属性的列表,则可以要求它们提供值。但是方法之类的东西没有价值。您也许可以调用它们并读取它们的返回值,但这不同于读取属性或字段的值。
换句话说,您必须根据每个成员的类型对每个成员进行不同的工作。由于MemberInfo
是最低的公分母,因此它不具有仅对成员的 some 有效的任何功能。如果您想使用其他功能,则需要使用GetProperties
或GetFields
之类的更具体的方法之一。
由于您的课程包含属性,因此您可能希望获取属性列表:
Public Class Person
Public Property Name As String
Public Property Age As Integer
Public Overrides Function ToString() As String
Dim bigStr As String = ""
For Each p As PropertyInfo In Me.GetType().GetProperties()
bigStr &= p.Name & " " & p.GetValue(Me)?.ToString()
Next
Return bigStr
End Function
End Class