C# 带句点的命名空间问题
我有一门课:C# 带句点的命名空间问题,c#,namespaces,C#,Namespaces,我有一门课: namespace FooIOS { public class Foo { public static void doThis() {...} } } 这是有效的: using FooIOS; namespace Sample.iOS { public void method () { Foo.doThis(); } } 但是,当我更改名称空间以插入句点时,情况与此不同: namespace Foo.iOS
namespace FooIOS
{
public class Foo
{
public static void doThis() {...}
}
}
这是有效的:
using FooIOS;
namespace Sample.iOS
{
public void method () {
Foo.doThis();
}
}
但是,当我更改名称空间以插入句点时,情况与此不同:
namespace Foo.iOS
{
public class Foo
{
public static void doThis() {...}
}
}
using Foo.iOS;
namespace Sample.iOS
{
public void method () {
// Compilation error
Foo.doThis();
// Compilation error
Foo.iOS.doThis()
// This works but I can't have it that long and complicated (I'm writing an API call)
Foo.iOS.Foo.doThis();
}
}
我对C#非常缺乏经验,我想知道是否有任何方法可以在名称空间中使用句点,而不处理复杂的调用
namespace Foo.iOS
{
public class Foo
{
public static void doThis() {...}
}
}
您的命名空间名称是Foo.iOS
,类名是Foo
,静态方法名称是doThis()
。访问该方法的完全限定路径是NAMESPACE.CLASS.method\u NAME
,因此它变成:
Foo.iOS.Foo.doThis();
这里的C#
没有什么问题,但是您使用的命名有问题
从这一点上,我们可以提出几点建议:
- 尽量不要在名称空间的名称中使用
,因为这会引起混淆 - 尽量不要将名称空间命名为其中的类,因为这会引起混淆
using IOS = Foo.iOS;
...
IOS.Foo.doThis();
但正如我之前所说,最好首先避免在名称空间名称中使用
。使用Foo.iOS将带到名称空间中在名称空间Sample.iOS
名称空间块中的code>语句,如下图所示,然后您将能够在第一次尝试Foo.doThis()时调用doThis()代码>之前给您一个编译错误
namespace Sample.iOS
{
using Foo.iOS;
public void method () {
// this works
Foo.doThis();
}
}
相关阅读:由MSDN提供
完全工作的代码示例:
在Visual Studio中创建一个新的控制台应用程序,然后在Program.cs
类中,删除所有行,粘贴以下内容,进行编译,然后运行
using System;
namespace Foo.iOS
{
public class Foo
{
public static void doThis() { Console.Write("Inside doThis");}
}
}
namespace Sample.iOS
{
using Foo.iOS;
class Program
{
static void Main(string[] args)
{
method();
Console.ReadKey();
}
public static void method ()
{
// works fine
Foo.doThis();
}
}
}
还要注意名称空间、类、方法等是区分大小写的。在OP的示例中,名称空间是FooiOS,但使用的是FooiOS。谢谢您的回答。FooiOS与FooiOS只是一个输入错误。在命名空间中使用
是在大型项目中创建子命名空间的一种非常有效的方法。它本身没有什么问题。NET框架本身非常虔诚地使用这种结构。