C#中的部分接口

Gra*_*ton 55 c#

C#允许部分接口吗?即,在ManagerFactory1.cs类中,我有

public partial interface IManagerFactory
{
    // Get Methods
    ITescoManager GetTescoManager();
    ITescoManager GetTescoManager(INHibernateSession session);
}
Run Code Online (Sandbox Code Playgroud)

在ManagerFactory.cs类中,我有:

public partial interface IManagerFactory
{
    // Get Methods
    IEmployeeManager GetEmployeeManager();
    IEmployeeManager GetEmployeeManager(INHibernateSession session);
    IProductManager GetProductManager();
    IProductManager GetProductManager(INHibernateSession session);
    IStoreManager GetStoreManager();
    IStoreManager GetStoreManager(INHibernateSession session);
}
Run Code Online (Sandbox Code Playgroud)

ManagerFactory和ManagerFactory1都位于同一个程序集中.

Jon*_*eet 85

最简单的方法就是尝试:)

但是,是的,允许部分接口.

partial修饰符的有效位置(使用C#3.0规范引用):

  • 课程(10.1.2)
  • 结构(11.1.2)
  • 接口(13.1.2)
  • 方法(C#3.0+)(10.2.7; 10.6.8)

规范的10.2节包含了部分类型的大部分一般细节.

无效的地点:

  • 枚举
  • 代表

  • @Michael这通常在codegen'd代码中完成.这允许修改生成的类的行为而不从它们继承,因此没有调用虚函数的开销. (10认同)
  • @Michael,我不打算使用它,但知道它的存在是好的:) (2认同)

Kon*_*kus 8

是的,它确实.

MSDN上的部分类和方法(C#编程指南)

限制:

  • 必须修改所有部分类型接口定义,即相同类型的部分 partial
  • partial修饰符只能出现在关键字之前interface.
  • 必须在同一个程序集和相同的模块(.exe或.dll文件)中定义所有部分类型定义,即相同类型的部分.

在涉及代码生成时,主要使用部分接口.例如,当生成接口的一部分而另一部分是用户编写的时.


Kei*_*ith 8

确实如此,但一个重要的问题是什么?

部分类是存在的,因此您可以扩展自动生成的代码.VS可以生成表单文件或代码隐藏,或Linq to SQL访问器,您可以使用部分扩展它.

我会避免使用partials来分割类(或者在这种情况下是接口),因为它通常会产生比它值得更多的混乱.

在这种情况下,我会调查为什么这需要跨越多个文件 - 工厂模式接口可以使跟踪代码更复杂,但在这里您将通过多个文件进行跟踪.

  • 我通常也不会设计部分类和接口.但是我从代码生成中获得了类和接口.所以我必须使用partial来容纳代码 (7认同)
  • @Frank我从来不需要 - 当开发人员在文件的不同部分处理不同的方法时,合并工作正常,而*blame*功能可以准确地告诉您编辑每行的人.我发现SVN和TFS都是这种情况.但是,您的策略对于VSS或Vault等签出/签到模型非常有用. (2认同)

Krz*_*mic 5

在让你的界面部分化之前要三思而后行。也许将其分成两个接口更好?

保持你的界面小而集中。部分是代码味道。