1

我正在尝试在我的 Windows 服务的主类中定义一个属性。该属性将用于在需要时检索进程的名称。

例如:

public string PName
{
return SomeProcess.Name;
}

public string PID
{
return SomeProcess.ProcessId;
}

public Process SomeProcess
{
private Process[] myProcess = Process.GetProcessesByName("notepad"); //Process is underlined here with red wavy line saying "A get or set accessor method is expected"
get
{return myProcess[0];}
}

问题出在注释中写的 SomeProcess 属性中。我在这里做错了什么?

4

5 回答 5

4

让它像这样:

private Process[] myProcess = Process.GetProcessesByName("notepad"); 
public Process SomeProcess
{
   get
   {
        return myProcess[0];
   }
}

或者

public Process SomeProcess
{
   get
   {
        Process[] myProcess = Process.GetProcessesByName("notepad"); 
        return myProcess[0];
   }
}

编辑

请注意,您需要决定何时获取进程。如果您按照我在第一个示例中显示的那样进行操作,则将在实例化类时检索该过程。第二种方法更健壮,因为它会在您询问属性值时检索该过程。

我陈述了这两个答案,因为您询问了错误的含义,并且更多的是关于私有和局部变量。

于 2012-05-28T08:17:33.580 回答
1

试试这个:

public Process SomeProcess
{
    get
    {
        Process[] myProcess = Process.GetProcessesByName("notepad");
        return myProcess[0];
    }
}

或这个:

private Process[] myProcess = Process.GetProcessesByName("notepad");

public Process SomeProcess
{
    get
    {
        return myProcess[0];
    }
}

如果您想在类的其他地方使用它,请在 getter 中声明myProcess为局部变量,或者将其声明为类中的私有字段。SomeProcess您可以在字段/方法/类上使用访问器(私有/公共/等),而不是局部变量。

于 2012-05-28T08:16:01.943 回答
0

访问器(公共/私有/受保护/内部)不能应用于函数局部变量。

使用辅助功能级别的限制

于 2012-05-28T08:17:11.673 回答
0

如果要声明私有变量,请get在属性中声明内部方法。根据您的代码,您需要GetProcessesByName在访问之前检查是否返回过程 myProcess[0]。您可以使用 FirstOrDefault如下方式避免所有这些验证。如果没有结果,它将返回 null。

public Process SomeProcess
{
   get
   {
        return Process.GetProcessesByName("notepad").FirstOrDefault();
   }
}

其他属性也有问题。您访问的属性SomeProcess不检查 null。

public string PName
{
     return SomeProcess==null? string.Empty:SomeProcess.Name;
}

public string PID
{
     return SomeProcess==null? string.Empty:SomeProcess.ProcessId;
}
于 2012-05-28T08:23:07.823 回答
0

我认为你处于非常初级的水平,你应该参考语言代码的语法,找到下面的 C# 代码

 public class ProcessInfo
{
    private Process[] myProcess = Process.GetProcessesByName("notepad"); //Process is underlined here with red wavy line saying "A get or set accessor method is expected" 
    public Process SomeProcess
    {
        get
        {
            return myProcess[0];
        }
    }

    public string PName
    {
        get
        {
            return SomeProcess.ProcessName;
        }
    }

    public int PID
    {
        get
        {
            return SomeProcess.Id;
        }

    }
} 
于 2012-05-28T08:23:53.767 回答