Thank you JB.

I understand it is not possible with the IL code. In this case it won't
work, but if the method has no params, the code cannot be executed somehow
to test the outcome?

If that is also not possible I know that I don't have to look further.

Thanks,

Regards,
Kasper


On Fri, Jan 11, 2013 at 9:52 AM, Jb Evain <[email protected]> wrote:

> No, it's not possible.
>
> See:
>
> --
> abstract class Foo
> {
>     public abstract int Do();
> }
>
> class Bar : Foo
> {
>     public override int Do()
>     {
>         return 2;
>     }
> }
>
> class Baz : Foo
> {
>     public override int Do()
>     {
>         return 42;
>     }
> }
>
> class Program
> {
>     static void Main(string[] args)
>     {
>         Foo f;
>
>         if (args.Length == 0)
>             f = new Bar();
>         else
>             f = new Baz();
>
>         Console.WriteLine(f.Do());
>     }
> }
> --
>
> Look at the expression:
>
> f.Do();
>
> At the IL level, what Cecil sees, all you'll get it is:
>
> callvirt int Foo::Do()
>
> There's no way, at the Cecil level, to know if Bar.Do() or Baz.Do()
> will be called.
>
> Jb
>
>
> On Fri, Jan 11, 2013 at 9:45 AM, Kasper Stolk <[email protected]> wrote:
> > So it's unfortunately not possible to find out?
> >
> >
> > On Wednesday, 9 January 2013 23:47:21 UTC+1, Kasper Stolk wrote:
> >>
> >> Thank you Jon,
> >>
> >> The method is virtual indeed.
> >> Can I use Cecil to invoke that method to determine that? What I have is
> >> the MethodDefinition from the Body.Instructions.
> >>
> >>
> >>
> >> Groeten,
> >> Kasper
> >>
> >>
> >> On Wed, Jan 9, 2013 at 11:12 PM, Jonathan Pryor <[email protected]>
> wrote:
> >>>
> >>> On Jan 9, 2013, at 3:59 PM, Kasper Stolk <[email protected]> wrote:
> >>> > How can I get the reference to the overridden class? Is it determined
> >>> > at runtime?
> >>>
> >>> If the method is virtual, then the method to invoke is determined at
> >>> runtime.
> >>>
> >>>  - Jon
> >>>
> >>> --
> >>> --
> >>> mono-cecil
> >>
> >>
> > --
> > --
> > mono-cecil
>
> --
> --
> mono-cecil
>

-- 
--
mono-cecil

Reply via email to