Классы C #: доступ к методам через экземпляры - PullRequest
2 голосов
/ 08 февраля 2012

Могу ли я получить доступ к методу из экземпляра класса?Пример:

class myClass
{
       private static int n = 0;

       public static myClass()
       { n = 5;}

       public static void Afis()
       { 
              Console.WriteLine(n);
       }

}

и в пустоте Main:

static void Main()
{
          myClass m = new myClass();
          m.Afis();
}

Это дает мне: cannon be accessed with an instance referece.Это потому, что я объявил функцию статической?Если это так, когда я должен использовать static, а когда нет, потому что в c ++, если я объявляю что-то со static, он просто инициализируется один раз.Это в случае с C #?

Ответы [ 7 ]

3 голосов
/ 08 февраля 2012

Для доступа к методу static необходимо использовать имя класса, а не имя переменной.

myClass.Afis();

Я приложил ссылку на Статические классы и члены статических классов Руководство по программированию, поскольку вы спросили, когда их следует использовать, а не использовать.

Немного напрягаясь от руководства по программированию:

Статический класс может использоваться как удобный контейнер для наборов методы, которые просто работают с входными параметрами и не должны получать или установите любые внутренние поля экземпляра. Например, в .NET Framework Class Library, статический класс System.Math содержит методы которые выполняют математические операции, без необходимости хранить или получить данные, которые являются уникальными для конкретного экземпляра Math класс.

1 голос
/ 08 февраля 2012

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

1 голос
/ 08 февраля 2012

Это потому, что я объявил функцию статической?

Точно.

Если это так, когда я должен использовать статический

Угадайте, что - из ошибки: когда вам не нужночтобы получить доступ к переменным экземпляра.

, потому что в c ++, если я объявляю что-то статическим, оно просто инициализируется один раз.Так ли это с c #?

Если вы имеете в виду статический конструктор - да.

По сути, у вас есть не «класс», а статический класс, который не можетбыть воплощенным во все дела.

1 голос
/ 08 февраля 2012

Это верно - это статическая функция, и поэтому она называется:

myClass.Afis();
1 голос
/ 08 февраля 2012

Статические методы вызываются через сам класс, а не его экземпляр.

static void Main()
{
    myClass m = new myClass();
    myClass.Afis();
}
1 голос
/ 08 февраля 2012

Да, как вы подозреваете, вы не можете получить доступ к статическому методу через экземпляр объекта, только через сам тип.

Другими словами:

myClass.Afis();

Естественно -обратное также верно;Вы также не можете получить доступ к методу экземпляра через тип.

Вы можете узнать больше о том, когда и не использовать static в других вопросах, таких как этот , но ясказал бы, что static ограничивает некоторые желательные вещи, такие как тестируемость и полиморфизм (чтобы назвать только пару), и поэтому не должен быть вашей "позицией по умолчанию".

0 голосов
/ 08 февраля 2012

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

Статические методы используются, когда метод ссылается на тип и не использует информацию об экземпляре.String.IsNullOrEmpty(string s) такой статический метод.Он принадлежит строковому классу, но не требует среды экземпляра.Принимая во внимание, что метод ToString(), который каждый объект наследует от объекта, нуждается в контексте экземпляра, чтобы определить, что выражать как строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...