2010-08-05 56 views
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(串)

任何建议

回答

3

你可以打电话Utility.GetFileName()如果更改声明public static string GetFileName(string grpID)

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

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

当所有一类的成员是static,您可以添加static到类声明本身。在这一点上,你将永远无法调用new Utility(),这可能是你在这种情况下,想要的东西。

1

它看起来像你想标记你的方法(也可能是您的CLAS S还)为静态:

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

然后,你可以这样调用:

string filename = Utility.GetFileName(ID); 
1

使该方法的静态,你可以使用它,而该类

public static string GetFileName(string grpID) 
的实例210

用法:

Utility.GetCSFileName(ID); 
2

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

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

      string realPath = GetPath(filenameUNC); 

      return realPath; 
    } 
} 

然后您将能够调用你的方法与Utility.GetFileName(...)

了解更多关于静态方法/类here

1

你不必有一个新的,如果您设置方法为静态方法:

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

然后你还必须调用类的名字,但你不必实例化它:

因此而不是:
Utility util = new Utility(); util.GetFileName(“myString”);

你可以这样做:

Utility.GetFileName("myString"); 

你不能做到这GetFileName("myString")的原因是你没有从那里它被定义的类中调用它。

1

当方法标记为static关键字时,意味着您不必为目标创建一个新的实例(使用'new')来调用该方法。

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

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);。 但你还是要提一下。