2012-02-08 2 views
2

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

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++, если я объявляю что-то со статикой, он просто инициализируется один раз. Это дело с C#?

+1

использовать 'myClass.Afis()' или удалить ключевое слово 'static' в объявлении метода – yas4891

+1

См. [Этот вопрос] (http://stackoverflow.com/questions/2308681/what-is-the-difference-between -a-static-variable-in-c-vs-c) для сравнения значений C++ и C# 'static'. – PHeiberg

ответ

3

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

myClass.Afis(); 

Я приложил ссылку на руководство Static Classes and Static Class Members программирования, как вы просили, когда вы должны использовать их и не использовать их.

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

A static class can be used as a convenient container for sets of methods that just operate on input parameters and do not have to get or set any internal instance fields. For example, in the .NET Framework Class Library, the static System.Math class contains methods that perform mathematical operations, without any requirement to store or retrieve data that is unique to a particular instance of the Math class.

1

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

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

myClass.Afis(); 

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

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

1

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

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

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

myClass.Afis(); 
1

Is it because i declared the function static?

Ровно.

If that is so when should I use static

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

because in c++ if i declare something with static it just initialize once. Is that the case with c#?

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

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

1

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

0

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

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

Смежные вопросы