【问题标题】:Implementing two interfaces or not?是否实现两个接口?
【发布时间】:2009-10-29 03:29:27
【问题描述】:

我正在编写一个同时返回 DataTable 和 IEnumerable 的类。除了返回类型之外,我无法定义完全相同的接口方法。所以,我希望我可以创建这个接口(显然,它不会编译):

interface IMyInterface
    {
        DataTable GetResults();
        IEnumerable<string> GetResults();
    }

那么,您将如何构造这两个函数、重命名它们、多个接口、参数?

我只是好奇你们会如何处理它,你......

【问题讨论】:

  • 你真的需要他们有相同的名字吗?

标签: c# oop interface


【解决方案1】:

我会这样做:

interface IMyInterface
{
    DataTable GetResultsAsTable();
    IEnumerable<string> GetResultsAsSequence();
}

显然,C# 不允许您拥有两个签名仅因返回类型不同而不同的方法(有趣的是,CLR 确实 允许这样做)。考虑到这一点,我认为最好给方法提供公共前缀并附加一个指示返回类型的后缀。

【讨论】:

  • 我认为这就是我将要采用的方式。谢谢。
【解决方案2】:

你能做到吗?

interface IMyInterface    { 
   DataTable GetDTResults();        
   IEnumerable<string> GetIEResults();    
}

【讨论】:

    【解决方案3】:

    您可以使用 out 参数保持相同的方法名称:

    interface IMyInterface
    {
         void GetResults(out DataTable results);
         void GetResults(out IEnumerable<string> results);
    }
    

    【讨论】:

      【解决方案4】:

      我会重命名第一个方法:

      DataTable GetResultsDataTable();
      

      【讨论】:

        【解决方案5】:

        无论您是作为接口还是作为常规类执行此操作,这都不会编译,因为您有两个具有相同名称和相同无参数签名的方法。

        此外,使用两种截然不同的类型返回方法结果的设计含义非常糟糕。

        【讨论】:

          猜你喜欢
          • 2010-10-20
          • 2017-08-18
          • 2019-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-08
          • 2017-12-26
          • 1970-01-01
          相关资源
          最近更新 更多