日期:2014-05-17  浏览次数:20805 次

对于接口不太理解
public IList<string> GetShipCountries() 中 IList是表示接口对吧


再看,但是函数返回的却是List<string>
List<string> countries =new List<string>();
return countries;


问题
1.接口到底是什么东西,该什么时候用
2.函数不是要求返回接口吗public IList<string>? 为什么返回的是List<string> ?

谢谢



C# code

        public IList<string> GetShipCountries()
        {
            OrderDAL orderDAL = new OrderDAL();
            List<string> countries =new List<string>();
            if (orders != null && orders.Count > 0)
            {
                foreach (Order order in orders)
                {
                    if (!countries.Contains(order.ShipCountry))
                    {
                        countries.Add(order.ShipCountry);
                    }
                }
            }
            else
            {
                countries = orderDAL.GetShipCountries();
            }
           
            return countries;
        }



------解决方案--------------------

2. 因为List<string>实现了 IList<string>?
------解决方案--------------------
1.接口定义了一些行为,是一种约定,实现接口的类,必须提供提供这些行为。
------解决方案--------------------
继承了接口实现.是属于它的子类.
------解决方案--------------------
建议随便找一本C#书,读一下继承和接口相关章节,这是最基本的。
------解决方案--------------------
List<string>是IList<string>的一个具体子类,可以参考"协变和逆变"的关系.接口就是定义了一组行为,然后由子类去实现它.
------解决方案--------------------
当你需要行为和规范的时候,可定义接口


------解决方案--------------------
IList<> 泛型接口 而List<>则实现了该接口
接口:
C# code

interface IYouYong
{
   void Method();
}
class Person:IYouYong
{
  void Method()
  {
    
  }
}

然后我们可以这样去定义个接口变量【用该接口的实现类(这里就是Person)进行初始化】
IYouYong  subject=new Person();
subject.Method();

------解决方案--------------------
接口是一种约束,也是一个父类,在父类代替子类做事中,接口作用就很大了,很多设计都源于此
------解决方案--------------------
问题:
1.接口到底是什么东西,该什么时候用
2.函数不是要求返回接口吗public IList<string>? 为什么返回的是List<string> ?

回答:
1.接口是一个定义的规范,是一个抽象的概念,没有具体的实现。大型项目时,一般先定义系统功能所需要的接口,在JAVA或C#中,主要是用于解决类不能多继承的问题来设计的,用了接口就可以实现多继承(类只能继承一个,而接口可以实现很多个)。
2.List<string>实现了IList<string>接口,或者说List<string>是IList<string>的“子类”,这就是“里氏替换”原则,也就是说父类出现的地方,子类一定可以出现。
------解决方案--------------------
看来还是云里雾里,只有实践了才会有更深的理解
------解决方案--------------------
接口定义的是行为,LIST<STRING>来实现ILIST<STRING> 。可以去看看接口和继承这一块的内容 ,属于C#基础知识。
------解决方案--------------------
接口是规范代码 降低藕度

继承接口都类都有了限制这样能做到规范

代码规范后就不容易出现冗余的代码。不过。当然不是什么地方都用接口用不好程序越来越难理解

------解决方案--------------------
9楼回答的很详细。
public IList<string> GetShipCountries()
{
OrderDAL orderDAL = new OrderDAL();
List<string> countries =new List<string>();
//如果更改为IList<string> countries =new List<string>();也许更好。
依赖倒转原则中,提到要面向接口编程,不要面向实现编程。

------解决方案--------------------