Динамическая загрузка dll - C#

Узнай цену своей работы

Формулировка задачи:

Есть dll с кодом
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TestDll
{
    static class Math
    {
        public class Cos : Command
        {
           public new int agr = 1;
           public new string name = "cos";
           public Cos()
           {
               base.name = name;
           }
           public override string Execution(string command)
           {
               string result = "";
               double res = 0;
               try
               {
                   res = double.Parse(command.Split(' ')[2]);
               }
               catch { result = "Недопустимое значение"; return result; }
 
               try
               {
                   if (command.Split(' ')[3] == "d") res = (res *(System.Math.PI)/ (double)180);
 
               }
               catch { }
               res = System.Math.Cos(res);
               return System.Math.Round(res, 3).ToString();
           }
            public override string Permission()
            {
                return "Math.Cos";
            }
        }
        public class Sin : Command
        {
            public new int agr = 1;
            public new string name = "sin";
            public Sin()
            {
                base.name = name;
            }
            public override string Execution(string command)
            {
                string result = "";
                double res = 0;
                try
                {
                     res = double.Parse(command.Split(' ')[2]);
                }
                catch { result = "Недопустимое значение"; return result; }
 
                try
                {
                    if (command.Split(' ')[3] == "d") res = (res * (System.Math.PI) / (double)180);
                    
                }
                catch {  }
                res = System.Math.Sin(res);
                return System.Math.Round(res, 3).ToString();
            }
            public override string Permission()
            {
                return "Math.Sin";
            }
        }
    }
}
Command соответственно реализован вот так
   public abstract class Command
    {
       public string name;
       public int agr;
      public abstract string Permission();
      public abstract string Execution(string command);
    }
Необходимо реализовать динамическую загрузку классов Cos и Sin в List<Command>. Я не нашел, как сделать это для вложенного класса.

Решение задачи: «Динамическая загрузка dll»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Reflection;
 
namespace ConsoleApplication173
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<Command>();
 
            var ass = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\..\ClassLibrary1\bin\Debug\ClassLibrary1.dll");
            foreach (var t in ass.GetExportedTypes())
                if (t.IsSubclassOf(typeof(Command)))
                    list.Add((Command)Activator.CreateInstance(t));
        }
    }
 
    public abstract class Command
    {
        public string name;
        public int agr;
        public abstract string Permission();
        public abstract string Execution(string command);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5