我有一个拆分为两个命名的部分。 问题是,如果我有谐音的一个实现的接口,它是不是在配合分阶级的认可。 例如,我希望下面为被认可为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; }
}
}
你不能有一个分部类在两个命名空间。 编译器将这些作为两个不同的类别。
我有一个拆分为两个命名的部分。
你不能。 通过在不同的命名空间之中,他们属于不同类别。
认为这是命名空间存在的理由-所以你可以有不同类别相同的类名 。
从C#语言规范(C#4.0),§10.2,局部类型:
分部类型声明的每个部分都必须包括部分改性剂。 它必须具有相同的名称,并在同一个命名空间或类型声明的其他部分进行声明 。
(重点煤矿)
因此,根据定义,你在做什么是不是部分类型。
见部分类定义
使用部分关键字表示类,结构或界面的其他部分可以命名空间中定义。
这是由于这样的事实,部分类型必须相同的命名空间内,因为每个类都有一个完全量化的名字,其中包括命名空间。 这方面的一个典型的例子是使用Windows窗体应用程序的设计和UI代码使用的是局部类分隔。 它还可以防止坏的设计在我看来!
您可以使用简单的反射代码(为了好玩大部分)看到自己这一点。
var namespaces = Assembly.GetExecutingAssembly().GetTypes()
.Select(t => t.Namespace)
.Distinct();
//Returns:
// WindowsFormsApplication2
// WindowsFormsApplication2.Properties
命名空间提供类型的逻辑政企分开。 MyNamespace.One.Product
和MyNamespace.Two.Product
两种不同类型的(如果不是这种情况,那么将是摆在首位的命名空间有没有点!)
由于using MyNamespace.One;
,
在Main()
:
var item = new Product();
是等价的:
var item = new MyNamespace.One.Product()
更改第二的命名空间Product
类型MyNamespace.One