-->

部分类中不同的命名空间没有被正确识别(Partial classes in different na

2019-08-07 16:49发布

我有一个拆分为两个命名的部分。 问题是,如果我有谐音的一个实现的接口,它是不是在配合分阶级的认可。 例如,我希望下面为被认可为ILastModified(在C#小提琴返回true http://ideone.com/heLDn0 ):

using System;
using MyNamespace.One;

public class Test
{
    public static void Main()
    {
        var item = new Product();
        Console.WriteLine(item is ILastModified); //RETURNS FALSE??!
    }
}

interface ILastModified
{
    DateTime LastModified { get; set; }
}

namespace MyNamespace.One
{
    public partial class Product
    {
        public int ID { get; set; }
    }
}

namespace MyNamespace.Two
{
    public partial class Product : ILastModified
    {
        public DateTime LastModified { get; set; }
    }
}

Answer 1:

你不能有一个分部类在两个命名空间。 编译器将这些作为两个不同的类别。



Answer 2:

我有一个拆分为两个命名的部分。

你不能。 通过在不同的命名空间之中,他们属于不同类别。

认为这是命名空间存在的理由-所以你可以有不同类别相同的类

从C#语言规范(C#4.0),§10.2,局部类型:

分部类型声明的每个部分都必须包括部分改性剂。 它必须具有相同的名称,并在同一个命名空间或类型声明的其他部分进行声明

(重点煤矿)

因此,根据定义,你在做什么是不是部分类型。



Answer 3:

见部分类定义

使用部分关键字表示类,结构或界面的其他部分可以命名空间中定义。

这是由于这样的事实,部分类型必须相同的命名空间内,因为每个类都有一个完全量化的名字,其中包括命名空间。 这方面的一个典型的例子是使用Windows窗体应用程序的设计和UI代码使用的是局部类分隔。 它还可以防止坏的设计在我看来!

您可以使用简单的反射代码(为了好玩大部分)看到自己这一点。

var namespaces = Assembly.GetExecutingAssembly().GetTypes()
                         .Select(t => t.Namespace)
                         .Distinct();

//Returns:
//  WindowsFormsApplication2
//  WindowsFormsApplication2.Properties


Answer 4:

命名空间提供类型的逻辑政企分开。 MyNamespace.One.ProductMyNamespace.Two.Product两种不同类型的(如果不是这种情况,那么将是摆在首位的命名空间有没有点!)

由于using MyNamespace.One;

Main()

var item = new Product();

是等价的:

var item = new MyNamespace.One.Product()

更改第二的命名空间Product类型MyNamespace.One



文章来源: Partial classes in different namespace are not being recognized correctly