Я уверен, что что-то упустил, поскольку C # не является моей сильной стороной, и я пришел из PHP-фона, но я пишу базовый класс (называемый GVProgram), который будет наследоваться дочерними классами (ProgramAПрограммаB).У меня есть следующее:
public class GVProgram {
public string path {get; set;}
public string name {get; set;}
public GVProgram(string progpath) {
path = progpath;
}
public Boolean isRunning() {
return Process.GetProcesses().Any(prc => prc.ProcessName.Contains(name));
}
}
public class ProgramA : GVProgram {
public ProgramA(string progpath):base(progpath) {
name = "Program A";
}
}
Когда я звоню ProgramA.isRunning()
, отладчик всегда жалуется, что name
равно нулю.Как мне заставить GVProgram увидеть элемент name
, который установлен внутри ProgramA?
Код объявления для классов
В моем классе формы есть:
private ProgramA progA;
private ProgramB progB;
Когда форма загружается, я звоню:
this.progA = new ProgramA("C:\path\to\program");
this.progB = new ProgramB("C:\some\other\path");
Фактический код для вызова функции isRunning () заключается в следующем, что может быть проблемой (хотя я не уверен, какобойти его, если он есть):
private void refreshProgramAButton_Click(object sender, EventArgs e)
{
checkProgramStatus(this.progA, this.programALabel, this.refreshProgramAButton);
}
protected void checkProgramStatus(GVProgram prog, Label label, Button button)
{
if (prog.isRunning())
{
...
}
}
Правильно ли я считаю, что checkProgramStatus вызывает прогу как GVProgram, а не как исходный класс и не, как я ожидал, просто используя GVProgram в качестве подсказки типаубедитесь, что передается правильный тип объекта?
Точки останова на isRunning
Я добавил точку останова к if (prog.isRunning())
и добавил Watch к this.progA
и prog
сама по функции.
this.progA
показывает, что name
и path
установлены в базе prog
показывает, что name
и path
установлены в самой проге, и[Programa] -> базы.Стек вызовов показывает> Program.exe!MyNamespace.GVProgram.isRunning() Line 28
Я изменил isRunning, чтобы использовать this.name
вместо просто name
.Когда я вошел в функцию во второй раз, я надел часы this
.Он также показал, что name
и path
были правильно заполнены.
Что вызвало это На самом деле он оказался конструктором для ProgramB.Требуется второй параметр, и перегруженный конструктор не устанавливает имя.Вот что я получаю за кодирование после полуночи.Спасибо всем за помощь!