关于 interface 和 class 之间 inherit 关系的测试

 

前两天,有同事问起这个问题,而且不是第一次,所以,决定做一个测试,以飨读者,也算是一次总结。 

首先,建立两个  class ,两个 interface ,如下:

namespace InterfaceClass
{

    public class ClassA

    {

        public string rtString ( )

        {

            return "ClassA";

        }

    }

}

 

namespace InterfaceClass

{

    public class ClassB

    {

        public string rtString ( )

        {

            return "ClassB";

        }

    }

}

 

namespace InterfaceClass

{

    public interface InterfaceA

    {

        string rtInterfaceAString ( );

    }

}

 

namespace InterfaceClass

{

    public interface InterfaceB

    {

        string rtInterfaceBString ( );

    }

}

OK,测试开始:

1、建立一个测试类,使之  inherit ClassA

namespace InterfaceClass

{

    public class ClassTest : ClassA

    {

 

    }

}

通过控制台程序实例化此测试类,如下:

ClassTest classTest = new ClassTest ( );

Console.WriteLine ( classTest.rtString ( ) );

输出: ClassA

 

 

2、建立一个测试类,使之  inherit ClassB

namespace InterfaceClass

{

    public class ClassTest : ClassB

    {

 

    }

}

通过控制台程序实例化此测试类,如下:

ClassTest classTest = new ClassTest ( );

Console.WriteLine ( classTest.rtString ( ) );

输出: ClassB

 

 

3、建立一个测试类,使之  inherit ClassA ClassB

namespace InterfaceClass

{

    public class ClassTest : ClassB, ClassA

    {

 

    }

}

编译时输出异常:

InterfaceClass.ClassTest不能具有多个基类:InterfaceClass.ClassBClassA

 

 

4、建立一个测试类,使之  inherit InterfaceA

namespace InterfaceClass

{

    public class ClassTest : InterfaceA

    {

        public string rtInterfaceAString ( )

        {

            return "InterfaceA";

        }

    }

}

通过控制台程序实例化此测试类,如下:

ClassTest classTest = new ClassTest ( );

Console.WriteLine ( classTest.rtInterfaceAString ( ) );

输出: InterfaceA

 

 

5、建立一个测试类,使之  inherit InterfaceB

namespace InterfaceClass

{

    public class ClassTest : InterfaceB

    {

        public string rtInterfaceBString ( )

        {

            return "InterfaceB";

        }

    }

}

通过控制台程序实例化此测试类,如下:

ClassTest classTest = new ClassTest ( );

Console.WriteLine ( classTest.rtInterfaceBString ( ) );

输出: InterfaceB

 

 

6、建立一个测试类,使之  inherit InterfaceA InterfaceB

namespace InterfaceClass

{

    public class ClassTest : InterfaceB, InterfaceA

    {

        public string rtInterfaceBString ( )

        {

            return "InterfaceB";

        }

 

        public string rtInterfaceAString ( )

        {

            return "InterfaceA";

        }

    }

}

通过控制台程序实例化此测试类,如下:

            ClassTest classTest = new ClassTest ( );

            Console.WriteLine ( classTest.rtInterfaceAString ( ) );

            Console.WriteLine ( classTest.rtInterfaceBString ( ) );

 

输出: InterfaceA

      InterfaceB

 

 

7、建立一个测试类,使之  inherit InterfaceA InterfaceBClassA

namespace InterfaceClass

{

    public class ClassTest : InterfaceB, InterfaceA, ClassA

    {

        public string rtInterfaceBString ( )

        {

            return "InterfaceB";

        }

 

        public string rtInterfaceAString ( )

        {

            return "InterfaceA";

        }

    }

}

 

编译时输出异常:

基类ClassA必须在任何接口之前

 

 

8、建立一个测试类,使之  inherit ClassA InterfaceA InterfaceB

namespace InterfaceClass

{

    public class ClassTest :ClassA, InterfaceB, InterfaceA

    {

        public string rtInterfaceBString ( )

        {

            return "InterfaceB";

        }

 

        public string rtInterfaceAString ( )

        {

            return "InterfaceA";

        }

    }

}

 

通过控制台程序实例化此测试类,如下:

            ClassTest classTest = new ClassTest ( );

            Console.WriteLine ( classTest.rtString ( ) );

            Console.WriteLine ( classTest.rtInterfaceAString ( ) );

            Console.WriteLine ( classTest.rtInterfaceBString ( ) );

输出: ClassA

      InterfaceA

      InterfaceB


总结:
      1、类不可以同时 inherit 自两个及以上类
      2、类可以同时 implement 多个接口
      3、类在同时 inherit 类和 implement 接口时,要将需要 inherit 的类写到第一,要先 inherit 类,再 implement 接口

 以上,只是基本测试,不当之处,请指正。

posted @ 2009-08-26 11:19  龙之王  阅读(266)  评论(0编辑  收藏  举报