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

时间:2014-11-17 06:45:23

标签: c# inheritance dll system extends

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

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

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

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

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

但我不喜欢这样。我想扩展Process类,或者部分然后添加属性,该类的方法会更漂亮。 扩展很简单,只需

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),只返回一个或多个进程对象,我试图进行转换,但它不能。

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

3 个答案:

答案 0 :(得分:1)

如果您的问题是“我如何自动从特定类型转换?”,那么您需要在MProcess类上定义运算符explicit

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

我建议您尝试将其定义为Extension Method

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();

答案 1 :(得分:0)

好吧,对于大多数问题我并不理解你的意思,我认为你必须找一个懂英语的人来翻译你想要的东西。

无论如何,正如我在评论中写的那样,你可以像你一样使用继承类,或类扩展,我会添加link here。如果您告诉我“您的意思”,我会根据您的具体问题编辑我的问题

至于问题的最后部分:

  

但是,如何获得MProcess? Process类的静态方法   仅作为GetCurrentProcess(),GetProcessesByName(字符串ProcessName)   返回一个或多个过程对象,我试图投射,但它不能。

静态方法GetCurrentProcess()将返回Process类。你不能仅仅因为你创建了一个继承类来构建类,不能再用一棵树来说它只是因为苹果树是树的一种形式而是苹果树

答案 2 :(得分:0)

做一件事。不要覆盖Process类。在您的MProcess Class&中添加Process属性对它进行操作。像这样:

public class MProcess
{
   //...blah blah
   //...

   private System.Diagnostics.Process myProcess;

   public System.Diagnostics.Process MyProcess
   {
       get {return myProcess;}
       set {myProcess = value;}
   }

   //...blah blah
}