我正在尝试在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属性中。我在这里做错了什么?
答案 0 :(得分: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];
}
}
修改强>
请注意,您需要决定何时获取流程。如果按照我在第一个示例中显示的那样执行,则在实例化类时将检索该进程。第二种方式更强大,因为它会在您询问属性的值时检索进程。
我说明了这两个答案,因为您询问了错误的含义,更多的是私有和局部变量。
答案 1 :(得分: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];
}
}
在myProcess
的getter中声明SomeProcess
作为局部变量,或者如果要在类的其他地方使用它,则将其声明为类中的私有字段。您可以在字段/方法/类上使用访问器(私有/公共/等),而不是在局部变量上使用。
答案 2 :(得分:0)
访问者(public / private / protected / internal)不能应用于函数局部变量。
答案 3 :(得分: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;
}
答案 4 :(得分: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;
}
}
}