【问题标题】:Having trouble in C# Interfaces在 C# 接口中遇到问题
【发布时间】:2009-04-02 22:43:05
【问题描述】:

我正在努力理解这个 -why- 的原因......当我使用 IInterface 语法时,我真的很难理解我告诉编译器要做什么的概念。任何人都可以用“这是怎么回事”的方式来解释它吗?

无论如何……我的主要问题是……

有什么区别

public IEnumerable<string> MyMethod() {...}

public string MyMethod() : IEnumerable {...}

你为什么要使用一个而不是另一个?

【问题讨论】:

  • 您的第二个示例不是有效代码。 (我假设您的意思是 C# - 值得标记这个问题。)如果您可以使两个示例都有效,我们会告诉您其余的差异。

标签: c# .net interface ienumerable


【解决方案1】:
public string MyMethod() : IEnumerable {...}

不会编译,这是一个区别。

但你可以有

public class MyClass : IEnumerable<string> {...}

然后

public IEnumerable<string> MyMethod() 
{
   MyClass mc = new MyClass();
   return mc;
}

【讨论】:

    【解决方案2】:

    当你说public IEnumerable&lt;string&gt; MyMethod() {...} 时,你声明了一个方法,它返回一些实现IEnumerable&lt;string&gt; 的实例。此实例可能是字符串数组、List&lt;string&gt; 或您创建的某种类型。

    当你说public class MyClass : IEnumerable&lt;string&gt; {...} 时,你是在声明一个实现IEnumerable&lt;string&gt; 的类型。 MyMethod 可以返回一个 MyClass 的实例。

    【讨论】:

      【解决方案3】:

      第一个是有效的方法声明,只要它存在于一个类中 即

      class MyClass 
      {
          public IEnumerable<string> MyMethod() {...}
      }
      

      第二个不是有效的 C# 并且不会编译。它接近于 Class 声明。

      class MyClass : IEnumerable<string>
      {
      
      }
      

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多