Home All Groups Group Topic Archive Search About

Interitance and PropertyInfo Question

Author
23 Feb 2007 10:15 PM
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();
}
}

Author
23 Feb 2007 10:35 PM
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();
        }
    }


Show quote
"lucius" <lucius@newsgroup.nospam> wrote in message
news:8pput25h7srh1vpq554h8kbr5a2rc9kbg5@4ax.com...
> .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();
> }
> }
>
>
Author
24 Feb 2007 11:46 PM
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.


On Fri, 23 Feb 2007 15:35:25 -0700, "Ashot Geodakov"
<a_geoda***@hotmail.com> wrote:

Show quote
>That's because GrandChildProperty in your GrandChildThing is not a property
>but a member variable.
>
>Redefine your class like th
Author
25 Feb 2007 7:10 AM
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.

Show quote
"lucius" <lucius@newsgroup.nospam> wrote in message
news:mgj1u2trm4kog60odnvk55jactgq8gtfpb@4ax.com...
> 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.
>
>
> On Fri, 23 Feb 2007 15:35:25 -0700, "Ashot Geodakov"
> <a_geoda***@hotmail.com> wrote:
>
>>That's because GrandChildProperty in your GrandChildThing is not a
>>property
>>but a member variable.
>>
>>Redefine your class like th
Author
26 Feb 2007 2:45 AM
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 (waw***@online.microsoft.com, 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.
Author
1 Mar 2007 2:21 AM
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 (waw***@online.microsoft.com, 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.
Author
2 Mar 2007 6:10 PM
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.


On Thu, 01 Mar 2007 02:21:37 GMT, waw***@online.microsoft.com (Walter
Wang [MSFT]) wrote:

Show quote
>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 (waw***@online.microsoft.com, 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.

AddThis Social Bookmark Button