在不同的命名空间部分类在不同的命名空间部分类(Partial class in different

2019-05-11 20:13发布

我可以创建不同的命名空间部分类? 它会正常运行? 例如:

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

我应该怎么做才能使其工作? (如果我的例子不正确)

Answer 1:

类的名称包含它的命名空间,所以name1.Fooname1.name2.Foo是两个完全不同的类型。 因此,简短的回答你的问题是:没有。

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



Answer 2:

局部类只在同一命名空间和相同的组件可能。

命名空间可以在两个不同的组件,但局部类不能。



Answer 3:

下面是一些点,同时实现部分类考虑: -

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

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

  • 部分类的所有部件应在相同的命名空间。

  • 部分类的每个部分应该是在同一程序或DLL,换句话说,你不能创建在不同的类库项目的源文件的部分类。

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

  • 如果你继承一个类或接口上的部分类则继承了部分类的所有部分。

  • 如果部分类的一部分被密封,然后整个类将被密封。

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



Answer 4:

这将无法正常工作。 编译器会给你的模糊名称错误Foo classFoo = new Foo(); 线。 对于部分类的工作,他们必须在同一个名字,因为名字空间实际上是类的完全限定名称的一部分。



Answer 5:

另外,对于静态类可以实现像这样的新鲜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的类做到这一点。 但是,部分类是没有办法的办法,因为其他已经注意到。



Answer 6:

从MSDN部分类和方法的限制https://msdn.microsoft.com/en-us/library/wa80x488.aspx



文章来源: Partial class in different namespaces