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];
   }
}

編集

プロセスをいつ取得するかを決定する必要があることに注意してください。最初のサンプルで示したように実行すると、クラスがインスタンス化されたときにプロセスが取得されます。2番目の方法は、プロパティの値を要求したときにプロセスを取得するため、より堅牢です。

エラーが何を意味するのか、そしてプライベート変数とローカル変数に関するものであるとあなたが尋ねたので、私は両方の答えを述べました。

于 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];
    }
}

myProcessのゲッター内でローカル変数として宣言するかSomeProcess、クラスの他の場所で使用する場合は、クラス内でプライベートフィールドとして宣言します。ローカル変数ではなく、フィールド/メソッド/クラスでアクセサー(private / public / etc。)を使用できます。

于 2012-05-28T08:16:01.943 に答える
0

アクセサ(public / private / protected / internals)は、関数のローカル変数には適用できません。

アクセシビリティレベルの使用に関する制限

于 2012-05-28T08:17:11.673 に答える
0

プライベート変数を宣言する場合getは、プロパティ内のメソッド内で宣言します。コードに従って、GetProcessesByNameにアクセスする前にリターン プロセス かどうかを確認する必要がありますmyProcess[0]。以下のように使用することで、これらすべての検証を回避でき FirstOrDefaultます。結果がない場合は null を返します。

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

他のプロパティにも問題があります。SomeProcessnull をチェックせずにプロパティにアクセスします。

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 に答える