Interitance and PropertyInfo Question

L

lucius

..NET 2.0.



In the below code, when GrandChildThing is instanced, the
GrandChildProperty is never set in line 9 of ChildThing. Visual Studio
2005 IntelliSense says that the instance is GrandChildThing, but there
are no properties in the propInfos count and the property is never
set. Why?


public class BaseThing
{
public string ThingOutput;
}


public class ChldThing : BaseThing
{
internal void DoSomething()
{
string yes="yes";
PropertyInfo[] propInfos = this.GetType().GetProperties(); // count is
zero
foreach (PropertyInfo propertyInfo in this.GetType().GetProperties())
{
if ( propertyInfo.Name == "GrandChildProperty")
{
XmlDocument grandchildXml = new XmlDocument();
propertyInfo.SetValue( this , grandchildXml , null );
}
}
}
}


public class GrandChildThing : ChildThing
{
public XmlDocument GrandChildProperty;

public Work()
{
base.DoSomething();
}
}
 
A

Ashot Geodakov

That's because GrandChildProperty in your GrandChildThing is not a property
but a member variable.

Redefine your class like this:

class GrandChildThing : ChildThing
{
private XmlDocument prop;

public XmlDocument GrandChildProperty // Now it's a property.
{
get
{
return prop;
}
set
{
prop = value;
}
}

public void Work()
{
base.DoSomething();
}
}
 
L

lucius

Then I guess I need to look for member variables and not properties.
Classes must serialize to Java, and member variables do that cleanly
but properties don't. So how can I query a class for member vars with
Reflection?

Thanks.
 
A

Ashot Geodakov

Not sure about Reflection, but System.Type can query for members.

Look in MSDN for System.Type.InvokeMember doc, it's got samples.
 
W

Walter Wang [MSFT]

Hi lucius,

To get the member variables, you need to use Type.GetFields() instead of
Type.GetProperties().

By default Type.GetFields() will return all public fields (including static
public fields). To return private fields and non-static, use another
overload of the Type.GetFields by passing BindingFlags enumeration values:

FieldInfo[] fldInfos = this.GetType().GetFields(BindingFlags.NonPublic |
BindingFlags.Instance);

Hope this helps.


Sincerely,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications. If you are using Outlook Express, please make sure you clear the
check box "Tools/Options/Read: Get 300 headers at a time" to see your reply
promptly.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
W

Walter Wang [MSFT]

Hi lucius,

I am interested in this issue. Would you mind letting me know the result of
the suggestions? If you need further assistance, feel free to let me know.
I will be more than happy to be of assistance.

Have a great day!

Regards,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
L

lucius

Please consider the matter closed, and thanks to you and the MVPs for
help. I was trying to stay with members to make things eaiser to
serialize with Java SOAP interop, but I have now moved to just using
Properties instead.

Thanks again.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top