C # не может найти статический метод внутри публичного метода другого класса - PullRequest
0 голосов
/ 28 мая 2018

У меня есть телевизор статического класса:

namespace nTV {
    public static class TV {

        public static bool isOn;

        public static void SetOn(){
            //do stuff to set attribute isOn
        }
    }
}

, и у меня есть класс House:

namespace nHouse{
    public class House{

        public void CheckTV(){
            TV.SetOn();
        }

    }
}

Когда я звоню TV.SetOn() (или даже TV.isOn) изнутриХаус говорит, что

TV не содержит определения для SetOn .

Что я делаю не так?Как я могу найти методы телевизора в другом классе?

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

namespace из классов отличаются (nTV и nHouse), поэтому вы должны упомянуть nTV как using nTV;

 using nTV;

 ...   

 namespace nHouse {
   public class House{
     public void CheckTV(){
       TV.SetOn();
     }
   }

   ...
 }

Если вы хотите адрес nTV.TV по его короткому имени TV.Другая возможность состоит в объявлении обоих классов в том же пространстве имен:

 namespace Houses {
   public static class TV {
     public static bool isOn;

     public static void SetOn(){
       //do stuff to set attribute isOn
     }
   }
 }

 ...

 namespace Houses {
   public class House {
     public void CheckTV() {
       TV.SetOn();
     }
   }
 }
0 голосов
/ 28 мая 2018

Отредактировано :

Я думаю, что у вас есть 2 TV классов, один в nHouse и один в nTV.

Оригинальный ответ:

Либо, как предложил Vulpex, или

добавьте using nTV; к файлу.

Проблема в том, что полное имя TV равно nTV.TV, но при вызове из одного и того же пространства имен вы можете сократить его.Таким образом, вы либо

  • используете полное имя
  • , используете его в одном и том же пространстве имен (очевидно, здесь это невозможно)
  • или добавляете оператор using как I

РЕДАКТИРОВАТЬ

Похоже, ваша проблема возникает из-за того, что класс статичен.Поэтому вам (в соответствии с https://stackoverflow.com/a/28123407/939213) необходимо использовать следующий синтаксис:

с использованием статического nTV;

РЕДАКТИРОВАТЬ 2

Я протестировал свое первое решение для редактирования (используя static) и увидел, что а) в этом нет необходимости и б) оно даже не работает (я получаю ошибку в Visual Studio).Вот мой код, который отлично работает.Файлы находятся в отдельных каталогах, и перед каждым я ставлю другое пространство имен с классом (чтобы проверить, может ли это привести к сбою VS. Это не так.)

namespace calledNS
{
    public static class CalledClass
    {
        public static void CalledMethod() { }
    }
}

и

using calledNS;
...
namespace callerNS
{
    public class CallerClass
    {
        public void CallerMethod() { CalledClass.CalledMethod(); }
    }
}

Так что моя единственная идея (которая на самом деле наиболее соответствует вашим ошибкам) ​​заключается в том, что:

У вас есть 2 TV классов, один в nHouse и один в nTV.

Думаю, это объясняет все поведение, которое вы видите.

0 голосов
/ 28 мая 2018

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

namespace nHouse
{
    public class House
    {
        public void CheckTV()
        {
            nTV.TV.SetOn();
        } 
    } 
}

ИЛИ

using nTV;

namespace nHouse
{
    public class House
    {
        public void CheckTV()
        {
            TV.SetOn();
        } 
    } 
}

вы должны указать компилятору в каком пространстве имен искать метод, который вы пытаетесь вызвать.Если вы не укажете полное имя nTV.TV.SetOn(), вам нужно будет указать имя в начале файла, чтобы использовать пространство имен с using nTV;

рабочий cs Fiddle

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