关于针对接口编程的优点
namespace ConsoleApplication1
{
     class Program
     {
         static void Main(string[] args)
         {
             //Animal _dog = new dog();
             //_dog.makeSound();
             dog _dog = new dog();
             _dog.makeSound();
         }
     }
     public interface Animal
     {
         void makeSound();
     }
     public class dog : Animal
     {
         public void makeSound()
         {
             brak();
         }
         void brak()
         {
             Console.Write("this is dog sound.");
             Console.Write("1");
             Console.Write("2");
             Console.Write("3");
             Console.Write("4");
             Console.Write("5");
         }
     }
     public class cat : Animal
     {
         public void makeSound()
         {
             meow();
         }
         void meow()
         {
             Console.Write("this is dog cat.");
             Console.Write("6");
             Console.Write("7");
             Console.Write("8");
             Console.Write("9");
             Console.Write("10");
         }
     }
}
去掉注释和不去掉注释到底区别在哪?请按此代码进行解释,谢谢。
在本例中,我怎么就看不到优点呢?
------解决方案--------------------针对接口 这里的接口应该是针对这个animal吧 是父类 而不是interface 接口是广义的概念
------解决方案--------------------面向接口编程,接口中只有方法声明,而没有具体实现,上面的Animal就相当与一个指针,具体可能指向dog,也可能指向cat,dog和cat就相当于具体的业务,当业务更改时,只需要更改一下指向就可以了,把Animal _dog = new dog();改成Animal _dog = new cat();就相当于更换了业务.这样后期的维护就会很方便,业务改变,重新写一个业务类,把指向更改一下,就行了,其他什么都不要改!  
------解决方案--------------------
------解决方案--------------------面向组件编程的要义是在服务器与客户端之间定义契约,如你的例子中的Animal接口的makeSound()方法,
只要这个契约不变,服务器根据不同的类(如你的dog和cat)可有不同的实现,甚至同一个类可以发布不同
的版本,而客户端代码可不做改变。应该说面向组件编程与传统的面向对象编程是一大进步,但是它最大的缺
点是不能实现不同平台的互操作,所以又出现了面向服务编程。
------解决方案--------------------作为接口的客户端,接口的使用者关心的是接口对外提供的能力,也就是公共方法,而不管具体是什么对象具有这种能力,而且这种通过接口进行的对象耦合比直接通过类型的耦合性要弱,也就是在将来可以更方便的扩展。
另外,面向接口的设计更容易进行单元测试,详情可以了解一下NMock