C#在另一个类的public方法中找不到静态方法

时间:2018-05-28 14:43:56

标签: c# methods static

我有静电类电视:

namespace nTV {
    public static class TV {

        public static bool isOn;

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

我有班级的房子:

namespace nHouse{
    public class House{

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

    }
}

当我从House内部致电TV.SetOn()(或甚至TV.isOn)时,它说

  

电视不包含 SetOn 的定义。

我做错了什么?如何在另一个班级中找到电视的方法?

3 个答案:

答案 0 :(得分:2)

使用全名。你需要从什么名称空间告诉它。

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

OR

using nTV;

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

您必须告诉编译器在哪个命名空间中查找您尝试调用的方法。除非您提供全名nTV.TV.SetOn(),否则您必须在文件开头命名,以使用using nTV;

命名空间

working cs Fiddle

答案 1 :(得分:2)

<强>被修改

我认为您有2个TV个类,一个在nHouse,一个在nTV

原始回答

要么是Vulpex建议的,要么是

using nTV;添加到文件中。

问题是TV的全名是nTV.TV,但是当从同一名称空间中调用时,您可以缩短它。所以你要么

  • 使用全名
  • 在同一名称空间内使用它(显然这里不可能)
  • 或者如我所提到的那样添加using声明。

修改

看起来你的问题来自于静态的类。因此,您(根据https://stackoverflow.com/a/28123407/939213)需要使用以下语法:

使用静态nTV;

编辑2

我已经测试了我的第一个编辑解决方案(使用static)并看到a)没有必要和b)它甚至不起作用(我在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

这可以解释你所看到的所有行为,我想。

答案 2 :(得分:1)

这些类的namespace不同的nTVnHouse),这就是为什么你应该提到nTV为{{1} }}

using nTV;

如果您想要地址 using nTV; ... namespace nHouse { public class House{ public void CheckTV(){ TV.SetOn(); } } ... } 的简称nTV.TV。另一种可能性是在相同的命名空间中声明两个类:

TV