0

ユーティリティクラスに関数があります

  namespace GUI.code
 {
   public class Utility
  {
     public string GetFileName(string grpID)
    {
        string filenameUNC = "\\\\" + "localhost" + "\\AgentShare\\";

        string realPath = GetPath(filenameUNC);

        return realPath;
    }
   }
  }

今、私はこのようなプロジェクトの別のページからこの関数を呼び出します:

new utility.GetCSFileName(ID);

なぜ私は新しいものを追加する必要があるのですか、なぜ私はそれを次のように呼ぶことができないのですか?

GetCSFileName(ID);

私が持っているとき

     using GUI.code;

上に

新しいものを削除すると、このエラーが発生します

エラー1非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です'copiunGUI.code.GUIUtility.GetCSFileName(string)

助言がありますか

4

7 に答える 7

3

Utility.GetFileName()宣言を次のように変更すると呼び出すことができますpublic static string GetFileName(string grpID)

staticメンバーがクラスのすべてのインスタンス間で共有されることを意味します。Utilityc# はオブジェクト指向言語であることを思い出してください。非静的メンバーはインスタンスメンバーと呼ばれ、クラスの個別のインスタンスで呼び出す必要があります。を呼び出すたびにnew Utility()、そのようなインスタンスが作成されます。これは他のインスタンスとは異なります。

これは、クラスの各インスタンスが情報 (状態) を内部的に維持する必要がある場合に役立ちます。ただし、特定のメンバーが状態データを使用しない場合 (パラメーターを受け入れ、機能し、オプションで結果を返す場合)、それは静的であると宣言できます。次に、インスタンス変数からではなく、クラス名自体から呼び出します (この場合はUtility.GetFileName().

クラスのすべてのメンバーが の場合、クラス宣言自体にstatic追加できます。staticその時点で、 を呼び出すことはできnew Utility()ません。これは、この場合に必要なことかもしれません。

于 2010-08-05T15:36:57.873 に答える
2

メソッドを静的としてマークする必要があります。

public class Utility
{
     public static string GetFileName(string grpID)
     {
            string filenameUNC = "\\\\" + "localhost" + "\\AgentShare\\";

            string realPath = GetPath(filenameUNC);

            return realPath;
     }
}

その後、メソッドを呼び出すことができますUtility.GetFileName(...)

静的メソッド/クラスの詳細については、こちらをご覧ください。

于 2010-08-05T15:37:13.410 に答える
1

メソッド (および場合によってはクラスも) を static としてマークしたいようです。

public static class Utility
{
   public static string GetFileName(string grpID)
   ...

次に、次のように呼び出すことができます。

string filename = Utility.GetFileName(ID);
于 2010-08-05T15:36:41.947 に答える
1

メソッドを静的にすると、クラスのインスタンスなしで使用できます

例えば

public static string GetFileName(string grpID)

利用方法:

Utility.GetCSFileName(ID);
于 2010-08-05T15:36:58.327 に答える
1

メソッドを静的メソッドとして設定する場合は、新しいものを用意する必要はありません。

public static string GetFileName(string grpID)
{
 //your code here
}

次に、クラス名を呼び出す必要がありますが、インスタンス化する必要はありません。

その代わりに:
Utility util = new Utility(); util.GetFileName("myString");

できるよ:

Utility.GetFileName("myString");

そして、それができない理由GetFileName("myString")は、それが定義されているクラス内から呼び出していないからです。

于 2010-08-05T15:39:12.503 に答える
1

メソッドがキーワードでマークされているstatic場合、意図したように、メソッドを呼び出すために ('new' を使用して) オブジェクトの新しいインスタンスを作成する必要がないことを意味します。

注意すべきことの 1 つは、メソッドを静的としてマークすると、非静的メソッドを呼び出すことはできず、静的メソッドのみを呼び出すことができるということです。非静的なオブジェクトのプロパティも使用できません。

于 2010-08-05T15:39:34.467 に答える
1

秘訣は、メソッドを静的として定義することです。これはそれを行います:

 namespace GUI.code
 {
   public class Utility
  {
     public static string GetFileName(string grpID)
    {
        string filenameUNC = "\\\\" + "localhost" + "\\AgentShare\\";

        string realPath = GetPath(filenameUNC);

        return realPath;
    }
   }
  }

今、あなたは書くことができますutility.GetCSFileName(ID);。ただし、クラスについて言及する必要があります。

于 2010-08-05T15:41:37.463 に答える