Вызвать функцию в служебном классе
У меня есть функция в служебном классе
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 ответов
Ты можешь позвонить Utility.GetFileName()
если вы измените объявление на public static string GetFileName(string grpID)
static
означает, что член является общим для всех экземпляров Utility
учебный класс. Помните, C# является объектно-ориентированным языком. Нестатические члены называются членами экземпляра и должны вызываться для отдельного экземпляра класса. Каждый раз, когда вы звоните new Utility()
Вы создаете такой экземпляр, и это отличается от всех остальных.
Это полезно, когда каждый экземпляр класса должен поддерживать информацию (состояние) внутри. Однако, если конкретный элемент не использует данные состояния - он принимает параметры, работает и, необязательно, возвращает результат - его можно объявить статическим. Затем вы вызываете его не из переменной экземпляра, а из самого имени класса (в данном случае Utility.GetFileName()
,
Когда все члены класса static
, можете добавить static
к самому объявлению класса. В этот момент вы никогда не сможете позвонить new Utility()
, что может быть тем, что вы хотите в этом случае.
Вы должны пометить свой метод как статический.
public class Utility
{
public static string GetFileName(string grpID)
{
string filenameUNC = "\\\\" + "localhost" + "\\AgentShare\\";
string realPath = GetPath(filenameUNC);
return realPath;
}
}
После этого вы сможете вызывать свой метод с Utility.GetFileName(...)
Узнайте больше о статических методах / классах здесь.
Похоже, вы хотите пометить ваш метод (и, возможно, ваш класс также) как статический:
public static class Utility
{
public static string GetFileName(string grpID)
...
Тогда вы можете назвать это так:
string filename = Utility.GetFileName(ID);
Когда метод помечен static
Ключевое слово означает, что вам не нужно создавать новый экземпляр объекта (используя 'new') для вызова метода, как вы и предполагали.
Следует обратить внимание на то, что если вы помечаете метод как статический, он не может вызывать нестатические методы, только статические. Вы также не можете использовать любые свойства объекта, которые не являются статичными.
Сделайте метод статичным, и вы можете использовать его без экземпляра класса
например
public static string GetFileName(string grpID)
использование:
Utility.GetCSFileName(ID);
Хитрость заключается в том, чтобы определить метод как статический. Это сделает это:
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);
, Но вы все равно должны упомянуть класс.
Вам не нужно иметь новый, если вы устанавливаете свой метод как статический метод:
public static string GetFileName(string grpID)
{
//your code here
}
Тогда вам все еще нужно назвать имя класса, но вам не нужно создавать его экземпляр:
так что вместо:
Утилита util = новая утилита ();
util.GetFileName("туЗЬптд");
ты можешь сделать:
Utility.GetFileName("myString");
И причина, по которой вы не можете сделать просто GetFileName("myString")
в том, что вы не вызываете его из класса, где он определен.