C# 接口如何替换类?

C# 接口如何替换类?,c#,list,generics,interface,ilist,C#,List,Generics,Interface,Ilist,我创建了一个名为GetStudentMarks的方法。这个方法的返回类型是泛型列表。即使我用泛型IList替换了列表,代码也运行良好。当接口仅包含声明时,接口如何替换类?接口不能替换类。它只是一个类的蓝图,该类有一些实现,这些实现与接口设置的准则相对应。因此,您通常会有一个接口和一个或多个类,这些类对该接口有一些实现,如下所示: public interface IMyInterface{ IList<string> SomeList { get; } } public clas

我创建了一个名为GetStudentMarks的方法。这个方法的返回类型是泛型列表。即使我用泛型IList替换了列表,代码也运行良好。当接口仅包含声明时,接口如何替换类?

接口不能替换类。它只是一个类的蓝图,该类有一些实现,这些实现与接口设置的准则相对应。因此,您通常会有一个接口和一个或多个类,这些类对该接口有一些实现,如下所示:

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

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

返回类型是接口还是实体类并不重要。由于在方法内部返回的是完整类型,因此在返回实际数据之前,该类型被强制转换为声明的返回类型,因此一切都按预期进行

public IList<string> MyStrings()
{
  return new List<string>(); // Cast happens here just before return (List -> IList)
}
以后如果需要,可以将返回类型IList强制转换回solid类列表并以这种方式使用。

接口无法替换该类。接口可以创建一个抽象层,将实际的对象实现隐藏在接口之外,这就是为什么它被称为接口。
查看解释。

+1,尽管合同条款更为明确。接口承诺一个对象可以执行某种方法。只是简单地说,它隐藏或抽象了它定义的实现。