Reflection/List properties: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: added values) |
|||
Line 54: | Line 54: | ||
(<PrivateNumber>k__BackingField, 2) |
(<PrivateNumber>k__BackingField, 2) |
||
</pre> |
</pre> |
||
=={{header|D}}== |
|||
<lang d>import std.stdio; |
|||
struct S { |
|||
bool b; |
|||
void foo() {} |
|||
private void bar() {} |
|||
} |
|||
class C { |
|||
bool b; |
|||
void foo() {} |
|||
private void bar() {} |
|||
} |
|||
void printProperties(T)() if (is(T == class) || is(T == struct)) { |
|||
import std.stdio; |
|||
import std.traits; |
|||
writeln("Properties of ", T.stringof, ':'); |
|||
foreach (m; __traits(allMembers, T)) { |
|||
static if (__traits(compiles, (typeof(__traits(getMember, T, m))))) { |
|||
alias typeof(__traits(getMember, T, m)) ti; |
|||
static if (!isFunction!ti) { |
|||
writeln(" ", m); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
void main() { |
|||
printProperties!S; |
|||
printProperties!C; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Properties of S: |
|||
b |
|||
Properties of C: |
|||
b</pre> |
|||
=={{header|Elena}}== |
=={{header|Elena}}== |