2017-02-07 2 views
1

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

namespace MethodTest 
{ 
    class Program 
    { 
     public static void Foo() 
     { 
     } 

     static void Main(string[] args) 
     { 
      Foo(); 
     } 
    } 

    class MyClass 
    { 
     public static void asd(string[] args) 
     { 
      Foo(); 
     } 
    } 
} 

Однако, когда я пытаюсь вызвать его из другого класса, я получаю ошибку

CS0103 Ошибка название «Foo» не существует в текущем контексте MethodTest D: \ Визуальная Студия \ MethodTest \ MethodTest \ Program.cs 23 Активный PS: И, как я знаю, если мисс модификатор к нему доступ является частной ... Правильно ли?

+2

Try 'Program.Foo();' –

+2

Пробовали ли вы 'Program.Foo();'? – LarsTech

+0

Возможный дубликат [имя редакции Visual Studio не существует в текущем контексте] (http://stackoverflow.com/questions/12062149/visual-studio-saying-name-doesnt-exist-in-current-context) –

ответ

3

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

Попробуйте следующий код:

class MyClass 
{ 
    public static void asd(string[] args) 
    { 
     Program.Foo(); 
    } 
} 

Этот путь с помощью Program.Foo(); вы указать, какой точный метод (от различных Program класса) вы хотите использовать, так что CLR знает, какой метод для вызова.

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

new Program().Foo(); 
+0

Что касается второй части моего вопроса, является ли модификатор доступа по умолчанию закрытым? (Когда я не укажу его в моей программе, например: 'static void Foo() { } ') – melany

+1

Причина, по которой это называется, - это ключевое слово' static'. В противном случае это можно было бы назвать иначе. Ответ неполный –

+1

@ThomasWeller Я согласен с тобой. Я уточню свой ответ. –

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