envisager de suivre morceau de code:Comment .NET remplace la méthode non virtuelle dans .NET Remoting?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RemotingNonVirtualCall
{
class Program
{
static void Main(string[] args)
{
var domain = AppDomain.CreateDomain("Second Domain");
A extA = (A)domain.CreateInstanceAndUnwrap(typeof(A).Assembly.FullName, typeof(A).FullName);
Console.WriteLine(extA.CurrentDomain());
}
}
[Serializable]
sealed class A : MarshalByRefObject
{
public string CurrentDomain()
{
return AppDomain.CurrentDomain.FriendlyName;
}
}
}
Méthode A :: currentDomain est non virtuelle, la classe A est scellé. Mais CLR intercepte l'appel de méthode et le redirige vers une autre instance. Comment c'est possible? Est-ce une sorte de magie vaudou? Est-ce que CLR fait une exception dans la méthode appelant un objet hérité de la classe MarshalByRefObject? Comment est-il effectué?
Merci d'avance.