Предположим, что какой-то программист вручил мне скомпилированную программу без исходного кода, которая делает некоторые вещи, но не имеет графического представления о том, что она делает. Однако он предоставляет возможность легко добавить это. Но как программист позволит людям взаимодействовать с вещами в скомпилированной программе?Позволяет людям модерировать программу
Эта демонстрационная программа просто делает случайное число с максимальным значением, а затем запускает событие, которое должно раскрывать, что произошло с людьми, которые хотят использовать эти данные в своих собственных моделях для программы.
public delegate void MadeRandomEventHandler(int previous,int current,int max);
class MakeRandom
{
private static int current = 350;
private static int max = 350;
public static event MadeRandomEventHandler MadeRandomEvent;
public static void dowork()
{
int curCopy = current;
Random random = new Random();
current = random.Next(0, max+1);
fireMadeRandomEvent(curCopy,current,max);
}
private static void fireMadeRandomEvent(int previous, int current, int max)
{
if (MadeRandomEvent != null)
MadeRandomEvent(previous,current,max);
}
}
И, конечно, форма с кнопкой для вызова DoWork()
public partial class Form_Main : Form
{
public Form_Main()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MakeRandom.dowork();
}
}
Так что теперь все, что я должен был бы сделать, чтобы создать мод, который показывает мне, что случилось, это создать новую форму с индикатором прогресса и обработкой события, которое запускает класс MakeRandom.
Форма:
public partial class Form_Mod : Form
{
public static Form_Mod frm;
public Form_Mod()
{
InitializeComponent();
}
private void Form_Mod_Load(object sender, EventArgs e)
{
frm = this;
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
}
public void updateProgress(int percent)
{
progressBar1.Value = percent;
}
}
И обработка событий:
class Mod_HandleEvents
{
public static void attach()
{
MakeRandom.MadeRandomEvent += new MadeRandomEventHandler(RandomChange);
}
public static void detach()
{
MakeRandom.MadeRandomEvent -= new MadeRandomEventHandler(RandomChange);
}
private static void RandomChange(int previous, int current, int max)
{
float percent1 = (float)current/(float)max;
int percent = (int)(percent1 * 100);
Form_Mod frm = Form_Mod.frm;
frm.updateProgress(percent);
}
}
Но как я могу добавить этот код в программе, которую я была предоставлена? У меня нет исходного кода, поэтому я не могу его добавить &, а затем перекомпилировать. Я видел несколько программ, которые, похоже, компилируют файлы .cs на лету, и эти файлы .cs, похоже, втягиваются в основную программу. Как мне это сделать?
И, вероятно, мне придется добавить еще одну кнопку в основную форму, чтобы на самом деле открыть форму «Form_Mod». Поэтому программист, который передал мне основную программу, должен был предоставить способ сделать это, правильно? Или есть другой способ?
private void button2_Click(object sender, EventArgs e)
{
Form_Mod frm = new Form_Mod();
Mod_HandleEvents.attach();
frm.Show();
}
С точки зрения программирования, слово, которое вы ищете это «плагин». Посмотрите MEF на один способ создания плагинов. –