вызвать функцию в служебном классе - PullRequest
0 голосов
/ 05 августа 2010

У меня есть функция в служебном классе

  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 ]

3 голосов
/ 05 августа 2010

Вы можете позвонить Utility.GetFileName(), если измените объявление на public static string GetFileName(string grpID)

static. Это означает, что член является общим для всех экземпляров класса Utility.Помните, что c # - это объектно-ориентированный язык .Нестатические члены называются instance members и должны вызываться для отдельного экземпляра класса.Каждый раз, когда вы вызываете new Utility(), вы создаете такой экземпляр, и это отличается от всех остальных.

Это полезно, когда каждый экземпляр класса должен поддерживать информацию (состояние) внутри.Однако, если конкретный элемент не использует данные состояния - он принимает параметры, работает и, необязательно, возвращает результат - его можно объявить статическим.Затем вы вызываете его не из переменной экземпляра, а из самого имени класса (в данном случае Utility.GetFileName().

Когда все члены класса static, вы можете добавить static кСамо объявление класса. В этот момент вы никогда не сможете вызвать new Utility(), что может быть тем, что вы хотите в этом случае.

2 голосов
/ 05 августа 2010

Вам нужно пометить ваш метод как статический.

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

            string realPath = GetPath(filenameUNC);

            return realPath;
     }
}

После этого вы сможете вызывать свой метод с помощью Utility.GetFileName(...)

Подробнее о статических методах / классах здесь .

1 голос
/ 05 августа 2010

Хитрость заключается в определении метода как статического.Это будет сделано:

 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);.Но вы все равно должны упомянуть класс.

1 голос
/ 05 августа 2010

Если метод помечен ключевым словом static, это означает, что вам не нужно создавать новый экземпляр объекта (используя 'new') для вызова метода, как вы и предполагали.

Следует обратить внимание на то, что если вы пометите метод как статический, он не сможет вызывать какие-либо нестатические методы, только статические. Вы также не можете использовать любые свойства объекта, которые не являются статичными.

1 голос
/ 05 августа 2010

Вам не нужно иметь новый, если вы настроили свой метод как статический:

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

Тогда вам все равно нужно назвать имя класса, но вам не нужно его создавать:

так вместо:
Утилита util = новая утилита (); util.GetFileName ( "туЗЬптд");

вы можете сделать:

Utility.GetFileName("myString");

И причина, по которой вы не можете просто сделать это GetFileName("myString"), заключается в том, что вы не вызываете его из класса, в котором он определен.

1 голос
/ 05 августа 2010

Сделайте метод статичным, и вы можете использовать его без экземпляра класса

например

public static string GetFileName(string grpID)

использование:

Utility.GetCSFileName(ID);
1 голос
/ 05 августа 2010

Похоже, вы хотите пометить свой метод (и, возможно, также ваш класс) как статический:

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

Тогда вы можете назвать его так:

string filename = Utility.GetFileName(ID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...