> The documentation says:
>
[quoted text clipped - 18 lines]
> until I tried several examples and each of them produced the same
> output.
Well, using reflector, in 1.1, you can see that the implementation of
both of these properties is "return this;", so I don't think you'll
ever see a difference for them. In fact, a quick search through other
inheritors of MemberInfo, all of them either access an internal object
of type MemberInfo and use it's implementation, or they have the same
code.
I cannot find any implemented types with different implementations, so
I don't believe there'll ever be a difference.
Damien
Sathyaish - 19 Jul 2006 16:26 GMT
Gah! Why am I always so lazy to never open Reflector before I post a
question?
Thanks!
Damien - 20 Jul 2006 13:05 GMT
> Gah! Why am I always so lazy to never open Reflector before I post a
> question?
>
> Thanks!
Because it gives me an excuse to open Reflector and look at something
different. I've never even seen these properties before, but now if I
ever do start working with them, I'll already know something about them
- so it gives me a chance to learn :-)
Damien
> System.Type.DeclaringType
> Summary:
> Gets the class that declares this member.
>
> System.Type.ReflectedType
> Summary:
> Gets the class object that was used to obtain this member.
>
> Looks like the first one gets the class where the guy is declared
> whereas the second one gets the object instance name.
No. ReflectedType has nothing to do with instances. It is the Type
that a particular MemberInfo belongs to. If DeclaringType !=
ReflectedType, the member is inherited; you will get a different
MemberInfo if you query a derived type than if you query the base
type, even if you are looking at the same member.
Try running this code:
// begin snippet
using System;
using System.Reflection;
namespace Inheritance
{
class Program
{
static void Main(string[] args)
{
Type B = typeof(Base);
MethodInfo BaseFoo = B.GetMethod("Foo");
Console.WriteLine(
"In Base, DeclaringType = {0}, ReflectedTyped = {1}",
BaseFoo.DeclaringType.Name,
BaseFoo.ReflectedType.Name);
Type D = typeof(Derived);
MethodInfo DerivedFoo = D.GetMethod("Foo");
Console.WriteLine(
"In Derived, DeclaringType = {0}, ReflectedTyped = {1}",
DerivedFoo.DeclaringType.Name,
DerivedFoo.ReflectedType.Name);
Console.WriteLine(BaseFoo != DerivedFoo);
Console.ReadLine();
}
}
class Base
{
public virtual void Foo() { }
}
class Derived : Base { }
}
// end snippet

Signature
.NET 2.0 for Delphi Programmers www.midnightbeach.com/.net
Delphi skills make .NET easy to learn In print, in stores.