写几个带继承关系的类,使用直接强转的方式,以及使用as转换, 并且练习is的类型判断

接口IBaseA 、 IBaseB 和 IMyClass:

 interface IBaseA
    {
        void PrintBaseA();
    }

interface IBaseB
    {
        void PrintBaseB();
    }
 interface IMyClass
    {
        void PrintMyClass();
    }



实现IBaseA 、 IBaseB 和 IMyClass接口,继承类:

class BaseA : IBaseA 
    {
        public void PrintBaseA()
        {
            Console.WriteLine("This is PrintBaseA!");
        }
    }
 class BaseB : BaseA, IBaseB
    {
        public void PrintBaseB()
        {
            Console.WriteLine("This is PrintBaseB!");
        }
    }
 class MyClass : BaseB, IMyClass
    {
       public void PrintMyClass()
        {
            Console.WriteLine("This is PrintMyClass!");
        }
    }


Main

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace InterfaceIsAs
{
    //========================================================================
    //  クラス名 : Program
    /// <summary>
    /// Program
    /// </summary>
    /// <remarks>
    /// 查看带几个继承的类,使用强制转化的方式,
    /// 以及使用as转换, 并且练习is的类型判断
    /// </remarks>
    //========================================================================
    class InterfaceIsAs
    {
        //========================================================================
        //  メソッド名 : Main
        /// <summary>
        /// Main
        /// </summary>
        /// <remarks>
        /// 强制转化,查看其继承方式
        /// </remarks>
        //========================================================================
        static void Main(string[] args)
        {
            BaseA a1 = new BaseA();
            a1.PrintBaseA();

            BaseA a2 = new BaseB();
            a2.PrintBaseA();

            BaseA a3 = new MyClass();
            a3.PrintBaseA();

            BaseB b1 = new BaseB();
            b1.PrintBaseA();
            b1.PrintBaseB();

            BaseB b2 = new MyClass();
            b2.PrintBaseA();
            b2.PrintBaseB();

            MyClass mc1 = new MyClass();
            mc1.PrintBaseA();
            mc1.PrintBaseB();
            mc1.PrintMyClass();

            //TestBaseA
            TestBaseA(a1);
            TestBaseA(a2);
            TestBaseA(a3);
            Console.WriteLine();

            //TestBaseB
            TestBaseB(b1);
            TestBaseB(b2);
            Console.WriteLine();

            //TestMyClass
            TestMyClass(mc1);
            Console.WriteLine();

            Console.ReadKey();
        }

        //========================================================================
        //  メソッド名 : TestBaseA
        /// <summary>
        /// TestBaseA
        /// </summary>
        /// <param name="a">辅助变量</param>
        //========================================================================
        private static void TestBaseA(BaseA a)
        {
            /*
             * is: 检查对象是否与给定类型兼容,返回类型为bool(True or False)
             * 
             * as: 用于在兼容的引用类型之间之行转换。
             */
            if (a is IBaseA) 
            {
                IBaseA baseA = a as IBaseA;
                Console.WriteLine("baseA:{0}", baseA);
            }
            else
            {
                Console.WriteLine("Error!");
            }
        }

        //========================================================================
        //  メソッド名 : TestBaseB
        /// <summary>
        /// TestBaseB
        /// </summary>
        /// <param name="b">辅助变量</param>
        //========================================================================
        private static void TestBaseB(BaseB b)
        {
            if (b is IBaseB)
            {
                IBaseB baseB = b as IBaseB;
                Console.WriteLine("baseB:{0}", baseB);
            }
            else
            {
                Console.WriteLine("Error!");
            }
        }

        //========================================================================
        //  メソッド名 : TestMyClass
        /// <summary>
        /// TestMyClass
        /// </summary>
        /// <param name="mc">辅助变量</param>
        //========================================================================
        private static void TestMyClass(MyClass mc)
        {
            if (mc is IMyClass)
            {
                IMyClass myClass = mc as IMyClass;
                Console.WriteLine("myClass:{0}", myClass);
            }
            else
            {
                Console.WriteLine("Error!");
            }
        }
    }
}


 

猜你喜欢

转载自blog.csdn.net/JasmineDawn/article/details/7211194