@schufner

Как реализовать динамическое изменение класса в C#?

Доброго времени суток! Я в процессе изучения C# поэтому сильно не пинайте.
Как можно реализовать, лучше всего, динамическое изменение класса или хотя бы просто изменить класс.
Есть dll библиотека с пятью классами и в каждом классе библиотека Dictionary.

using System.Collections.Generic;
namespace language_game {
    public class change_language {
        public class English {
            public Dictionary<string, string> language = new Dictionary<string, string> {
                ["test"] = "Test"
            };
        }
        public class Russian {
            public Dictionary<string, string> language = new Dictionary<string, string> {
                ["test"] = "Тест"
            };
        }
        public class Ukrainian {
            public Dictionary<string, string> language = new Dictionary<string, string> {
                ["test"] = "Тест"
            };
        }
        public class Kazakh {
            public Dictionary<string, string> language = new Dictionary<string, string> {
                ["test"] = "Сынақ"
            };
        }
    }
}

Компилирую в dll.
Я создаю экземпляры классов в другом проекте и спокойно могу вызывать, то что мне нужно.
А вот как в строке WriteLine(english.language["test"]); поменять значение english.language["test"] например на russian.language["test"] используя переменную.
Например
var obj = English english = new English();
Сам код программы:
using System;
using System.Collections.Generic;
using static System.Console;
using static language_game.change_language;

namespace TestLib{
    class Program {        
        static void Main(string[] args) {
            English english = new English();
            Russian russian = new Russian();
            Ukrainian ukrainian = new Ukrainian();
            German german = new German();
            Kazakh kazakh = new Kazakh();

            WriteLine(english.language["test"]);
            ReadKey();
        }
    }
}


Я возможно не правильно выражаюсь =) Заранее извиняюсь! Всем добра!
  • Вопрос задан
  • 435 просмотров
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Если я правильно понимаю, то вы про полиморфизм)
Что-то вроде:

// Каждая локаль должна иметь в себе словарь с переводами
public interface class ILocale {
    Dictionary<string, string> Translation { get; }
}

// реализации разных локалей
public class English : ILocale {
    public Dictionary<string, string> Translation {get; set;} = new Dictionary<string, string> {
        ["test"] = "Test"
    };
}
public class Russian : ILocale {
    public Dictionary<string, string> Translation {get; set;}  = new Dictionary<string, string> {
        ["test"] = "Тест"
    };
}
public class Ukrainian : ILocale {
    public Dictionary<string, string> Translation {get; set;}  = new Dictionary<string, string> {
        ["test"] = "Тест"
    };
}
public class Kazakh : ILocale{
    public Dictionary<string, string> Translation {get; set;} = new Dictionary<string, string> {
        ["test"] = "Сынақ"
    };
}

И, допустим, читаем из какого-то конфига:
namespace TestLib{
    class Program {        
        static void Main(string[] args) {
            ILocale locale = GetLocale();
            WriteLine(locale.Translation["test"]);
            ReadKey();
        }
    }

    private static ILocale GetLocale() {
        // Мы можем получать ее динамически из конфига
        // но вызывающий код знает лишь, что это будет некая локаль, но какая
        // точно - неизвестно
        return Configuration.GetLocaleFromXml(); // псевдокод
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы