• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

模拟Asp.Net Forums 2.0 数据提供者类

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

using System;

using System.Reflection;

 

namespace AbstractClass

{

    //===============================================================

    // 模拟Asp.Net Forums 2.0 数据提供者类实现,

    // 以实现多数据库支持特性.

    // 2004.8.2 by venjiang.

    // ==============================================================

    #region 主程序调用

    class Class1

    {

        [STAThread]

        static void Main(string[] args)

        {

            // 所有方法调用,都在BaseAbstact类进行,不涉及子类调用.

            // 这样只要派生类(SubClass)能够重写基类相应方法就可以了.

 

            // 调用基类静态方法

            BaseAbstract.BaseOut();

           

            // 调用派生类SubClassA

            BaseAbstract ba=BaseAbstract.Instance("AbstractClass.SubClassA", "Power by venjiang.");

            ba.BaseOut1();

            ba=BaseAbstract.Instance("AbstractClass.SubClassA", "venjiang", 28);

            ba.BaseOut2();

           

            // 调用派生类SubClassB

            ba=BaseAbstract.Instance("AbstractClass.SubClassB", "Power by venjiang.");

            ba.BaseOut1();

            ba=BaseAbstract.Instance("AbstractClass.SubClassB", "venjiang", 28);

            ba.BaseOut2();

           

            Console.Read();

        }

    }

    #endregion

 

    #region 相当于ForumsDataProvider类

    public abstract class BaseAbstract

    {

        public static BaseAbstract Instance(string subClassType, string name)

        {

            Type myType=null;

 

            // 获取派生类的类型,在Forums2中subClassType这个类型由Web.config文件中<providers>下的type指定.

            myType = Type.GetType( subClassType );

            // 构建构造函数参数类型数组

            Type[] types = new Type[1];

            types[0] = typeof(string);

            // 获取指定参数的派生类的构造函数

            ConstructorInfo ci = myType.GetConstructor(types);

 

            // 指定派生类参数值

            object[] paramArray = new object[1];

            paramArray[0] = name;

 

            return (BaseAbstract)ci.Invoke(paramArray);

        }

 

        public static BaseAbstract Instance(string subClassType, string name, int height)

        {

            Type myType=null;

 

            // 获取派生类的类型

            myType = Type.GetType( subClassType );

            // 构建构造函数参数类型数组

            Type[] types = new Type[2];

            types[0] = typeof(string);

            types[1] = typeof(int);

            // 获取指定参数的派生类的构造函数

            ConstructorInfo ci = myType.GetConstructor(types);

 

            // 指定派生类参数值

            object[] paramArray = new object[2];

            paramArray[0] = name;

            paramArray[1] = height;

 

            return (BaseAbstract)ci.Invoke(paramArray);

        }

       

        public static void BaseOut()

        {

//          Type myType=null;

//          myType = Type.GetType("AbstractClass.SubClassA");

            Console.WriteLine("[基类]这是抽象类的静态方法");

//          Console.WriteLine("测试{0}",myType.ToString());

        }

        public abstract void BaseOut1();

        public abstract void BaseOut2();

    }

    #endregion

 

    #region 相当于SqlDataProvider类

    public class SubClassA:BaseAbstract

    {

       

        private string _name="";

        private int _height=0;

 

        public SubClassA(string name)

        {

            _name=name;

        }

        public SubClassA(string name,int height)

        {

            _name=name;

            _height=height;

        }

 

        public override void BaseOut1()

        {

            Console.WriteLine("[派生类A]重写基类BaseOut1方法,"+ _name);

 

        }

        public override void BaseOut2()

        {

            Console.WriteLine("[派生类A]重写基类BaseOut2方法,"+ _name + "," + _height.ToString());

 

        }

   

    }

    #endregion

 

    #region  相当于其它数据库支持类

    public class SubClassB:BaseAbstract

    {

       

        private string _name="";

        private int _height=0;

 

        public SubClassB(string name)

        {

            _name=name;

        }

        public SubClassB(string name,int height)

        {

            _name=name;

            _height=height;

        }

 

        public override void BaseOut1()

        {

            Console.WriteLine("[派生类B]重写基类BaseOut1方法,"+ _name);

 

        }

        public override void BaseOut2()

        {

            Console.WriteLine("[派生类B]重写基类BaseOut2方法,"+ _name + "," + _height.ToString());

 

        }

   

    }

    #endregion

}

运行结果如下:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.net实现匿名访问控制_asp.net技巧发布时间:2022-07-10
下一篇:
delphi.net在ASP.net中使用数据模块DM发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap