Partial class in different namespaces

Can I create partial class in different namespaces? Will it work correct? e.x.:

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?
    }
}

What should I do to make it work? (if my example not correct)


A class's name includes it's namespace, so name1.Foo and name1.name2.Foo are two completely separate types. So the short answer to your question is: No.

Why do you need to do something like this?


Partial class is only possible   in same namespace and same assembly.

Namespace could be   in two different assemblies but partial class could not.


Here are some point to consider while implementing the partial classes:-

  • Use partial keyword in each part of partial class.

  • Name of each part of partial class should be the same but source file name for each part of partial class can be different.

  • All parts of a partial class should be in the same namespace.

  • Each part of a partial class should be in the same assembly or DLL, in other words you can't create a partial class in source files of a different class library project.

  • Each part of a partial class has the same accessibility. (like private, public or protected)

  • If you inherit a class or interface on a partial class then it is inherited on all parts of a partial class.

  • If a part of a partial class is sealed then the entire class will be sealed.

  • If a part of partial class is abstract then the entire class will be considered an abstract class.

Partial Classes in C#


This will not work. The compiler will give you an ambiguous name error on the Foo classFoo = new Foo(); line. For partial classes to work, they must be in the same namespace because the namespace is actually part of the fully qualified name of the type.