我在实用程序类中有一个函数
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)
需要对象引用
任何建议
答案 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);
了。
但你还是要提一下课。