Pregunta

Actualmente, trato de entender algunos de los aspectos relacionados con la programación en C #.Ahora estoy aprendiendo LateBinding.Entiendo cómo crear un programa simple como el de abajo.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Try to do something with late bindings");
        Assembly a = null;
        try
        {
            a = Assembly.Load("CarLibrary");
            Console.WriteLine("1");
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine(ex.Message);
        }
        if (a == null)
        {
            CreateUsingLateBinding(a);
        }
        Console.ReadLine();
    }

    private static void CreateUsingLateBinding(Assembly asm)
    {
        try
        {
            Type sportCar = asm.GetType("CarLibrary.SportCar");
            object obj = Activator.CreateInstance(sportCar);
            Console.WriteLine("Success");
            MethodInfo mi = sportCar.GetMethod("TurboBust");
            mi.Invoke(obj, null);
        }
        catch (Exception)
        { }
    }

También creé carlibrary.dll y lo puso en una carpeta.Screenshot de ilesma

carlibrary il ilpast

todos funcionan bien.Solo tengo una pocas preguntas con respecto a este tema

  • ¿Cuándo es útil usar esto?
  • Si uso el tope de fecha, se supone que no sé nada sobre el recurso que quiero usar o lo sé todo al respecto (en este caso, por qué no puedo escribir el programa de forma normal, si conozco cadaClase y método de este recurso)?Sigue siendo un poco confuso para mí: intenta encontrar respuesta: resultado solo cómo usarlo.
¿Fue útil?

Solución

Bueno, imagina que tienes algunas clases infantiles

ex dll a

Estudiante de clase pública: Persona {}

dll b

Profesor de clase pública: persona {}

La persona puede estar en una asamblea común al que se hace referencia a estas DLL y su aplicación, teniendo así las diferentes implementaciones de un método virtual, etc. utilizando la reflexión, puede cargar todas las clases que heredan de la persona de clase.

public static IEnumerable<Type> GetSubclassesForType(Type baseClassType)
{
    List<Type> types = new List<Type>();
    foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies())
    {
       types.AddRange(ass.GetTypes().Where(type => type.IsSubclassOf(baseClassType)));
    }
    return types;
}

public static IEnumerable<Type> GetSubclassesForType(Assembly assembly, Type baseClassType)
{
    return from type in assembly.GetTypes() 
                        where type.IsSubclassOf(baseClassType)    
                        select type;
}

Otro uso de la unión tardía es que se puede usar si desea actualizar su solicitud solo copiando la DLL que contiene una parte de su código.Esto realmente puede ayudar cuando quiera actualizar rápidamente las aplicaciones de clientes de múltiples clientes. (Nota: También debe almacenar en caché los resultados de la reflexión después de la vinculación tardía para aumentar el rendimiento)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top