如何为 Process 类编写更多属性和方法



我想为Process类添加一些属性和方法。

我创建了一个名为 MProcess 的继承类,如下所示:

System.Diagnostics.Process prc = System.Diagnostics.Process.GetProcessesByName("ThankForRead.exe")[0];
MProcess process = new MProcess(prc);

如果我有任何要访问或通信的内容,请编写以下代码:

public void Kill(){
    this.prc.Kill();
}

但我不喜欢这种方式。我想扩展进程类,或者部分然后为该类添加属性、方法,它会更漂亮。扩展很容易,只是

public class MProcess : System.Diagnostics.Process
{
    //...blah blah
    public void GoAway()
    {
        Console.WriteLine("Bye");
        this.Kill(); // original method of process class
    }
    //...blah blah
}

但是,如何获得MProcess?Process 类的静态方法如 GetCurrentProcess()GetProcessesByName(string ProcessName) ,只返回一个或多个进程对象,我尝试强制转换但不能。

如果我的描述不清楚,请告诉我,我会尝试另一种方式让你理解我说的话,对不起我的英语不好。

如果你的问题是"我如何从特定类型自动强制转换?",那么你需要在MProcess类上定义显式运算符。

public class MProcess
{
    public static explicit operator MProcess(Process proc)
    {
        return new MProcess(proc);
    }
}

我建议您尝试将其定义为扩展方法。

public static class MyProcessExtensionMethods
{
    public static void GoAway(this Process proc)
    {
        Console.WriteLine("Bye");
        this.Kill(); // original method of process class
    }
}

然后,您可以将此方法用作:

Process prc = Process.GetProcessesByName("ThankForRead.exe")[0];
prc.GoAway();

好吧,对于大部分问题,我不明白你的意思,我认为你必须找一个懂英语的人来翻译你想要的东西。

无论如何,正如我在评论中所写,您可以像以前一样使用 inherit class 或类扩展,我将在此处添加一个链接。我会编辑我的问题,使其更适合你的具体问题,如果你告诉我这就是你的意思

至于问题的最后一部分:

但是,如何获得MProcess?进程类的静态方法,如 作为 GetCurrentProcess(), GetProcessesByName(字符串 ProcessName), 仅 返回一个或多个进程对象,我尝试强制转换,但不能。

静态方法GetCurrentProcess()将返回一个Process类。 你不能仅仅因为你创建了一个继承类就强制转换类,你不能再拿一棵树说它是一棵苹果树,仅仅因为苹果树是树的一种形式。

做一件事。不要重写进程类。 在 MProcess 类中添加进程属性并对其执行操作。喜欢这个:

public class MProcess
{
   //...blah blah
   //...
   private System.Diagnostics.Process myProcess;
   public System.Diagnostics.Process MyProcess
   {
       get {return myProcess;}
       set {myProcess = value;}
   }
   //...blah blah
}

最新更新