我创建了一个名为GetStudentMarks()
的方法。此方法的返回类型是通用的List<StudentMark>
。即使我将List<StudentMark>
替换为通用IList<StudentMark>
,代码也能正常运行。当接口只包含声明时,接口如何替换类?
答案 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
无法替换Class
。 Interface
可以创建一个隐藏实际对象实现beyound接口的抽象层(这就是为什么它被称为 interface )。
请查看Polymorphism以获取解释。