gpt4 book ai didi

c# - 让基类访问 C# 继承中的子成员

转载 作者:行者123 更新时间:2023-11-30 22:42:17 24 4
gpt4 key购买 nike

我确定我遗漏了一些东西,因为 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 看到在 ProgramA 中设置的 name 成员?

类的初始化代码

在我的表单类中,我有:

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 将 prog 转换为 GVProgram,而不是原始类,而不是像我预期的那样,只是使用 GVProgram 作为类型提示来确保传递正确的对象类型?

isRunning 上的断点

我在 if (prog.isRunning()) 上添加了一个断点,并在 this.progAprog 本身上添加了一个 Watch功能。

this.progA 显示 namepath 设置在基 prog 显示 namepath 设置在 prog 本身,而 [ProgramA]->base.调用堆栈显示 > Program.exe!MyNamespace.GVProgram.isRunning() Line 28

我将 isRunning 更改为使用 this.name 而不仅仅是 name。当我第二次进入该函数时,我在 this 上放了一个 watch 。它还表明 namepath 已正确填写。

是什么原因造成的它实际上最终成为 ProgramB 的构造函数。它采用了第二个参数,并且重载的构造函数没有设置名称。这就是我在午夜后编码的结果。感谢大家的帮助!

最佳答案

我猜你实例化了错误的类。添加您的类(class)后,我编写了两个程序。

这个失败并出现空引用异常

class Program
{
static void Main(string[] args)
{

GVProgram prog = new GVProgram();
Console.WriteLine(prog.isRunning());
}
}

这个没有。

  class Program
{
static void Main(string[] args)
{

ProgramA prog = new ProgramA("foo");
Console.WriteLine(prog.isRunning());
}
}

关于c# - 让基类访问 C# 继承中的子成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com