我有静电类电视:
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 的定义。
我做错了什么?如何在另一个班级中找到电视的方法?
答案 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;
答案 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(); }
}
}
所以我唯一的想法(实际上对你的错误最合适)是:
TV
个类,一个在nHouse
,一个在nTV
。这可以解释你所看到的所有行为,我想。
答案 2 :(得分:1)
这些类的namespace
是不同的(nTV
和nHouse
),这就是为什么你应该提到nTV
为{{1} }}
using nTV;
如果您想要地址 using nTV;
...
namespace nHouse {
public class House{
public void CheckTV(){
TV.SetOn();
}
}
...
}
的简称nTV.TV
。另一种可能性是在相同的命名空间中声明两个类:
TV