接口如何替换类?

时间:2011-09-29 07:33:22

标签: c# list generics interface ilist

我创建了一个名为GetStudentMarks()的方法。此方法的返回类型是通用的List<StudentMark>。即使我将List<StudentMark>替换为通用IList<StudentMark>,代码也能正常运行。当接口只包含声明时,接口如何替换类?

3 个答案:

答案 0 :(得分:5)

接口无法替换类。它只是一个类的蓝图,它具有一些与接口设置的指南相对应的实现。因此,您通常会有一个接口,而不是一个或多个类,这些接口具有一些实现,如下所示:

public interface IMyInterface{
 IList<string> SomeList { get; }
}

public class MyClass : IMyInterface {
  public IList<string> SomeList {
    get { 
      return new List<string>(){ "a", "b" , "c" }; 
    }
  }
}

答案 1 :(得分:2)

返回类型是接口还是实体类并不重要。由于在方法内部返回完整类型,因此在返回实际数据之前将类型转换为声明的返回类型,以便一切按预期工作。

public IList<string> MyStrings()
{
  return new List<string>(); // Cast happens here just before return (List -> IList)
}

稍后如果需要,可以将返回类型(IList)强制转换回实体类(List)并以这种方式使用它。

答案 2 :(得分:1)

Interface无法替换ClassInterface可以创建一个隐藏实际对象实现beyound接口的抽象层(这就是为什么它被称为 interface )。 请查看Polymorphism以获取解释。