部分类在不同的命名空间

我可以在不同的命名空间中创build部分类吗? 它会正常工作吗? 例如:

将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.Fooname1.name2.Foo是两个完全独立的types。 所以你的问题的简短答案是:不。

为什么你需要做这样的事情?

部分类只能在相同的名称空间和相同的程序集中使用。

命名空间可以在两个不同的程序集中,但部分类不能。

在实现部分类时需要考虑以下几点:

  • 在部分类的每个部分使用partial关键字。

  • 部分类的每个部分的名称应该相同,但部分类的每个部分的源文件名可以不同。

  • 部分类的所有部分应该位于相同的命名空间中。

  • 部分类的每个部分应该位于同一个程序集或DLL中,换句话说,不能在不同的类库项目的源文件中创build部分类。

  • 部分类的每个部分都具有相同的可访问性。 (如私人,公共或受保护)

  • 如果您inheritance了部分类的类或接口,则它将inheritance部分类的所有部分。

  • 如果部分class级的一部分被封闭,那么整个class级将被封闭。

  • 如果部分类的一部分是抽象的,那么整个类将被视为一个抽象类。

这是行不通的。 编译器会给你一个Foo classFoo = new Foo();的模糊名字错误Foo classFoo = new Foo(); 线。 对于部分类来说,它们必须位于相同的名称空间中,因为名称空间实际上是该types的完全限定名称的一部分。

此外,对于静态类,您可以使用静态特性在新的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(); } } } 

对于一些helper / utils类也许可以这样做。 但是其他人已经注意到,部分class不是这样。

MSDN中对部分类和方法的限制https://msdn.microsoft.com/zh-cn/library/wa80x488.aspx

Interesting Posts