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

标签 c# inheritance visibility

我确定我遗漏了一些东西,因为 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/

相关文章:

c# - C# 中基元的 == 和 Equals() 有什么区别?

c# - 在 Rider 中反编译 ASP.NET Core 3.x 源代码

python - 什么是 Python 中的兄弟类?

c# - 将对象转换为非显式实现的接口(interface)

c# - 如何在 C# 中创建一个变量来保存日期?

c# - 跨进程/平台的字符串列表的一致 HashCode

javascript - 使用 javascript 和不同于最初可见的图像更改 DIV 可见性。不使用按钮

javascript - 当选中单选按钮时,使用 JavaScript 隐藏字段集,无需 onchange

javascript - react : reach the component's parent or transfer data from parent to child

android - 制作 View "GONE"会导致其下方的 View 也不可见