Kaylis2 Ответов: 1

Как решить эту задачу в C#?


В моем проекте я создаю новый библиотечный проект, который выглядит следующим образом:
namespace MyLibrary
{
    public class Country
    {
        public string Name { get; set; }
        public int Population { get; set; }

        public string GetCountryInfo()
        {
            return "Country" + Name + "has population of" + Population + ".";
        }
    }
}

В основном проекте мне нужно: динамически создать экземпляр класса Country с помощью отражения, а затем динамически подключить метод GetCountryInfo. Представьте результат на консоль.

Что я уже пробовал:

Я пытался таким образом, но это не сработало:
class Program
    {
        static void Main(string[] args)
        {
            Assembly assem = null;

           


            Type countryType = assem.GetType("MyLibrary.Country");
            object obj = Activator.CreateInstance(countryType);

            Console.WriteLine("New type created dynamically: {0}", obj);
        }
    }


Как сделать эту задачу?

1 Ответов

Рейтинг:
6

OriginalGriff

Это не сработает.

Assembly assem = null;
Type countryType = assem.GetType("MyLibrary.Country");
Потому что вы установили assem для null вы не можете использовать его для доступа к каким - либо методам-null не является экземпляром чего-либо, тем более сборки.
Вероятно, то, что вам нужно, так это использовать Собрание.Метод Загрузки (System.Размышления) | Майкрософт Документы[^] чтобы загрузить свой DLL-файл, а затем получить доступ к типу и создать оттуда экземпляр.


Kaylis2

Как я могу решить задачу из моего вопроса? Пожалуйста, дайте мне правильную форму основного кода.

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Kaylis2

Поймите, сейчас я пытался сделать именно так:
классная программа
{
static void Main(string[] args)
{
Сборка assem = null;

пробовать
{
assem = сборка.Загрузить("MyLibrary");
}
поймать (исключение filenotfoundexception предоставление услуг по монтажу,)
{
Приставка.Метода WriteLine(искл.Сообщение);
вернуть;
}

if (assem == null)
вернуть;
Тип countryType = assem.Метод Gettype("Папку " MyLibrary".Страна");
объект countryObj = активатор.Метод createinstance(countryType);

MethodInfo mi = countryType.GetMethod("GetCountryInfo");

ми.Invoke(countryObj, new object[] { 10 });
object returnValue = mi.Invoke(countryObj, new object[] { 20 });

Приставка.Строку(аргумент returnvalue);
}
}
Консоль выдала мне ошибку исключения. я что - то неправильно написал?

OriginalGriff

Посмотрите на сообщение об исключении, и я почти уверен, что оно даст вам большую подсказку!

Kaylis2

спасибо, вы "действительно помогаете"

OriginalGriff

Всегда пожалуйста!