在实用程序类中调用函数

时间:2010-08-05 15:32:26

标签: c# asp.net utility-method

我在实用程序类中有一个函数

  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)

需要对象引用

任何建议

7 个答案:

答案 0 :(得分:3)

如果您将声明更改为Utility.GetFileName()

,则可以致电public static string GetFileName(string grpID)

static表示该成员在Utility类的所有实例之间共享。请记住,c#是一种面向对象的语言。非静态成员称为实例成员,必须在该类的不同实例上调用。每次调用new Utility()时,您都会创建一个这样的实例,这与其他实例不同。

当类的每个实例都需要在内部维护信息(状态)时,这很有用。但是,如果某个特定成员不使用状态数据 - 它接受参数,确实有效,并且可选地返回结果 - 它可以声明为静态。然后你不是从实例变量调用它,而是从类名本身调用它(在这种情况下是Utility.GetFileName()

当一个类的所有成员都是static时,您可以将static添加到类声明本身。此时,您永远无法拨打new Utility(),这可能就是您在这种情况下所需要的。

答案 1 :(得分:2)

您需要将方法标记为静态。

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

            string realPath = GetPath(filenameUNC);

            return realPath;
     }
}

然后,您就可以使用Utility.GetFileName(...)

调用您的方法

阅读有关静态方法/类here的更多信息。

答案 2 :(得分:1)

看起来你想把你的方法(也可能是你的类)标记为静态:

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

然后你可以这样称呼它:

string filename = Utility.GetFileName(ID);

答案 3 :(得分:1)

使方法成为静态,您可以在没有类

的实例的情况下使用它

例如

public static string GetFileName(string grpID)

用法:

Utility.GetCSFileName(ID);

答案 4 :(得分:1)

如果将方法设置为静态方法,则不必使用新方法:

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

然后你仍然需要调用类名,但你不必实例化它:

所以而不是:
    Utility util = new Utility();     util.GetFileName( “myString的”);

你可以这样做:

Utility.GetFileName("myString");

你不能只做GetFileName("myString")的原因是你不是从定义它的类中调用它。

答案 5 :(得分:1)

当方法用static关键字标记时,意味着您不必按照您的意图创建对象的新实例(使用“new”)来调用方法。

需要注意的一点是,如果将方法标记为静态,则不能调用任何非静态方法,只能调用静态方法。您也不能使用非静态对象的任何属性。

答案 6 :(得分: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);了。 但你还是要提一下课。