我可以创建不同的命名空间部分类? 它会正常运行? 例如:
将Class1.cs
namespace name1
{
public partial class Foo
{
Bar1(){
return 10;
}
}
}
class2.cs
namespace name1.name2
{
public partial class Foo
{
Bar2(){
return 100;
}
}
}
main.cs
using name1;
using name1.name2;
namespace mainClass
{
public class mainClass
{
Foo classFoo = new Foo();
int Count = classFoo.Bar1() + classFoo.Bar2();
// Will Count = 110?
}
}
我应该怎么做才能使其工作? (如果我的例子不正确)
类的名称包含它的命名空间,所以name1.Foo
和name1.name2.Foo
是两个完全不同的类型。 因此,简短的回答你的问题是:没有。
为什么你需要做这样的事情?
这将无法正常工作。 编译器会给你的模糊名称错误Foo classFoo = new Foo();
线。 对于部分类的工作,他们必须在同一个名字,因为名字空间实际上是类的完全限定名称的一部分。
另外,对于静态类可以实现像这样的新鲜C#6.0的帮助下使用静态功能 。
考虑:
namespace SomeLogic1
{
public static class Util
{
public static int Bar1()
{
return 1;
}
}
}
namespace SomeLogic2
{
public static class Util
{
public static int Bar2()
{
return 2;
}
}
}
namespace GeneralStuff
{
using SomeLogic1;
using SomeLogic2;
public class MainClass
{
public MainClass()
{
// Error CS0104
// 'Util' is an ambiguous reference between 'SomeLogic1.Util' and 'SomeLogic2.Util'
var result = Util.Bar1() + Util.Bar2();
}
}
}
没错,这并不编译,错误信息是明确的。 要解决这种情况,你可以直接指定命名空间(但你不希望这是我的理解):
namespace GeneralStuff
{
public class MainClass
{
public MainClass()
{
var result = SomeLogic1.Util.Bar1() + SomeLogic2.Util.Bar2();
}
}
}
或者您也可以申请使用静态特性是这样的:
namespace GeneralStuff
{
using static SomeLogic1.Util;
using static SomeLogic2.Util;
public class MainClass
{
public MainClass()
{
var result = Bar1() + Bar2();
}
}
}
也许它是确定的一些辅助/ utils的类做到这一点。 但是,部分类是没有办法的办法,因为其他已经注意到。
从MSDN部分类和方法的限制https://msdn.microsoft.com/en-us/library/wa80x488.aspx