惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
V
V2EX
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
P
Privacy International News Feed
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
K
Kaspersky official blog
S
Secure Thoughts
T
Tenable Blog
Security Latest
Security Latest
The Cloudflare Blog
S
Security @ Cisco Blogs
H
Heimdal Security Blog
aimingoo的专栏
aimingoo的专栏
TaoSecurity Blog
TaoSecurity Blog
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
Schneier on Security
Schneier on Security
Webroot Blog
Webroot Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Scott Helme
Scott Helme
IT之家
IT之家
Latest news
Latest news
The Hacker News
The Hacker News
C
Check Point Blog
T
The Exploit Database - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
N
News | PayPal Newsroom
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
S
Security Affairs
S
Securelist
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
A
About on SuperTechFans

博客园 - venjiang

发布Asp.Net Forums V2.2.1929 官方中文Beta版 转换DotNetNuke为C#版 Asp.Net Forums 2.0.1 内部开发版系统文件说明 发布Asp.Net Forums V2 中文官方 10.1 国庆版 asp.net forums2 本地化版本0831发布(开源) Asp.Net Forums2 本地化工作记录0831 获取的本地区域为何不变?搞得我头都大了! Asp.Net Forums2组件库简要说明 [转贴]IIS6.0服务器无法访问解决方案总结 测试你的Blog价值 Data Access Application Block V2 类库中文文档 Data Access Application Block 3.1 博客园LOGO[修改版] DotNet开发人员现在应该下载的十种必备工具下载说明 Caching ASP.NET pages 卸载Windows Messenger 和高手过招 解决Automation 服务器不能创建对象 [Asp.Net Forums 2.0]增加Pager控件没有的跳转页功能
模拟Asp.Net Forums 2.0 数据提供者类
venjiang · 2004-08-02 · via 博客园 - venjiang

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

}

运行结果如下: