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

推荐订阅源

S
Schneier on Security
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
D
DataBreaches.Net
F
Full Disclosure
腾讯CDC
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
The Register - Security
The Register - Security
WordPress大学
WordPress大学
博客园 - 聂微东
雷峰网
雷峰网
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
O
OpenAI News
Project Zero
Project Zero
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
Schneier on Security
Schneier on Security

博客园 - 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

}

运行结果如下: