实现接口有什么好处,欢迎大家来讨论一下,适当的代码举例子,顺便简单说说IList之类的东东

解决方案 »

  1.   

    感觉还可以,不过如果是独立开发用接口就比较浪费精力了如果希望架构层次更灵活或者做合作开发,可以牺牲点时间采用接口如果你做RAD快速开发就免了吧
      

  2.   

    面象对象的基本原则就是针对抽象编程,而不是针对实现编程,为了取得更大的灵活性.
    而java,C#等面向对象语言支持抽象的机制为 抽象类和接口,接口拥有更大的灵活性.
    我举一个小例子,不太完善,希望能给你一些启发.
    比如我们要做一个购书系统,购书后,需要进行打折,我们就来实现打折这一部分:using System;namespace InterfaceSample
    {
    /// <summary>
    /// 表示一本书
    /// </summary>
    class Book
    {
    /// <summary>
    /// 书名
    /// </summary>
    public string Name;
    /// <summary>
    /// 价格
    /// </summary>
    public decimal Money;
    } /// <summary>
    /// 书价打折接口(接口就像一个协议,你不用知道协议后面是什么,只需要知道它遵守了这个协 议),在这里,我们只知道这个接口会进行打折计算
    /// </summary>
    interface IBookMoneyComputer
    {
    /// <summary>
    /// 计算书价
    /// </summary>
    /// <param name="books">要计算价格的书目</param>
    /// <param name="totalMoney">书的总价格(打折前的)</param>
    /// <returns></returns>
    decimal Compute(Book[] books, decimal totalMoney);
    } //我们来实现两个打折器(构造两个类来实现IBookMoneyComputer接口)------------------ /// <summary>
    /// 总价打折器,只要书总价超过500, 我们就给它减去100
    /// </summary>
    class TotalMoneyComputer : IBookMoneyComputer
    {
    #region IBookMoneyComputer 成员 public decimal Compute(Book[] books, decimal totalMoney)
    {
    if (totalMoney > 500)
    return totalMoney - 100;
    return totalMoney;
    } #endregion
    }

    /// <summary>
    /// 书类别打折器,只要有一本书名为"DotNet",我们就给总价减去50
    /// </summary>
    class BookTypeComputer : IBookMoneyComputer
    {
    #region IBookMoneyComputer 成员 public decimal Compute(Book[] books, decimal totalMoney)
    {
    foreach (Book book in books)
    {
    if (book.Name == "DotNet")
    return totalMoney - 50;
    }
    return totalMoney;
    } #endregion
    }//----------------------------------------------------------------
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    /// <summary>
    /// 表态方法,接受一个book数组,和一个打折器,注意,我们这个参数是接口类型
    /// </summary>
    /// <param name="books"></param>
    /// <param name="computer"></param>
    /// <returns></returns>
    static decimal ComputeMoney(Book[] books, IBookMoneyComputer computer)
    {
    //注意,这里的计算打折前的总价程序不需要进行抽象
    decimal totalMoney = 0m;
    foreach (Book book in books)
    {
    totalMoney += book.Money;
    }
    //用接口类型进行打折,这样有很大的灵活性,可以随时更改打折策略
    return computer.Compute(books, totalMoney);
    } /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    //我们来购造三本书
    Book book1 = new Book();
    book1.Name = "aaa";
    book1.Money = 200; Book book2 = new Book();
    book2.Name = "bbb";
    book2.Money = 400; Book book3 = new Book();
    book3.Name = "DotNet";
    book3.Money = 200; //可以分别运行两种打折策略来进行打折
    Console.WriteLine(ComputeMoney(new Book[] { book1, book2, book3 }, new TotalMoneyComputer()));

    Console.WriteLine(ComputeMoney(new Book[] { book1, book2, book3 }, new BookTypeComputer()));
    Console.Read();
    }
    }


    }
    至于你说的实现.net类库中的接口有什么好处,你可以想象一下,只要有接口,就有调用接口的地方,这就像本例一样,为了取得灵活性(对于那个调用者来说)设计方面 的知识太多太多了,不是一个小例子能说完的.建议还是多看一些关于设计层面的书