类与接口

1、接口类似于类,但接口的成员都没有执行方式,它只是方法、属性、事件和 索引的组合而已,并且也只能包含
这四种成员;类除了这四种成员之外还 可以有别的成员(如字段)。
2、不能实例化一个接口,接口只包括成员的签名;而类可以实例化(abstract类 除外)。
3、接口没有构造函数,类有构造函数。
4、接口不能进行运算符的重载,类可以进行运算符重载。
5、接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰 符(如:虚拟或者静态)。
6、派生于接口的类必须实现接口中所有成员的执行方式,而从类派生则不 然。

接口与类实现的不同,仅供自己参考
static void Main(string[] args)
        {
            /*
             * 继承于接口的类必须实现接口所定义的方法
             */
            Dog dog1 = new Dog();  
            dog1.Ibark();
            cat mao1 = new cat();
            mao1.Ibark();


            //如果用类的话,需要在任务project中重写这3个‘程序员’类。
            Project pj = new Project();   
            VBcoder p1 = new VBcoder();
            pj.writeProject(p1);
            Csharp p2 = new Csharp();
            pj.writeProject(p2);
            PHP p3 = new PHP();
            pj.writeProject(p3);


            //使用接口来解决问题2
            //prject2类里只要定义 一个方法,其参数是接口。
            Project2 pj2 = new Project2();   
            IFWriteCode programer;


            //指明接口中的方法实现vb2类所对应的方法。
            programer = new vb2();   
            pj2.WriteProgram(programer);


            programer = new csharp2();
            pj2.WriteProgram(programer);


            programer = new PHP2();
            pj2.WriteProgram(programer);




        }


        public interface Ibark
        {
            void Ibark();
        }
        /*
         * 使用类继承接口
         */
        public class Dog:Ibark
        {
            public Dog()
            {
                //构造函数
            }
            public void Ibark()
            {
                Console.Write("wang!");
            }
        }
        public class cat : Ibark
        {
            public void Ibark()
            {
                Console.Write("miao!");
            }
        }


        /*
         * 问题2:如果只用类来实现,也可以,但多了就会比较麻烦
         */
        public class VBcoder
        {
            public void WriteCode()
            {
                Console.Write("VB.");
            }
        }
        public class Csharp
        {
            public void WriteCode()
            {
                Console.Write("C#");
            }
        }
        public class PHP
        {
            public void WriteCode()
            {
                Console.Write("PHP");
            }
        }
        //程序员接收到一个任务
        public class Project
        {
            public void writeProject(VBcoder vb)
            {
                vb.WriteCode();
            }
            public void writeProject(Csharp cs)
            {
                cs.WriteCode();
            }
            public void writeProject(PHP php)
            {
                php.WriteCode();
            }
        }


        //使用接口解决问题2.
        public interface IFWriteCode
        {
             void WriteCode();
        }
        public class vb2:IFWriteCode
        {
            public void WriteCode()
            {
                Console.Write("vb2");
            }
        }
        public class csharp2:IFWriteCode
        {
            public void WriteCode()
            {
                Console.Write("csharp2");
            }
        }
        public class PHP2:IFWriteCode
        {
            public void WriteCode()
            {
                Console.Write("PHP2");
            }
        }
        public class Project2
        {
            public void WriteProgram(IFWriteCode people)
            {
                people.WriteCode();
            }
        }


猜你喜欢

转载自blog.csdn.net/jos1n/article/details/78629683