1.先搞个单例 实现文章(一)中的接口
using System;
using zhazha.DB.Interface;
namespace zhazha.DB.Singleton
{
public class Singletion : IDBHelper //单例的实现
{
private static Singletion _Singletion = null;
//构造函数在单例模式下 不会被调用 只有反射的时候成为可能
private Singletion() {
Console.WriteLine("单例构造被调用!·");
}
//静态单例的实现
static Singletion(){
_Singletion = new Singletion();
}
public static Singletion get_Singletion()
{
return _Singletion;
}
public void Query()
{
Console.WriteLine("Singletion实现");
}
}
}
2.利用反射破坏单例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using zhazha.DB.Interface;
using zhazha.DB.Singleton;
using 发射;
namespace 发射
{
class Program
{
static void Main(string[] args)
{
------------Reflaction+Factory+Config-------------
//IDBHelper dBHelper1= Factory.CreateHelper();
//dBHelper1.Query(); //可配置 可扩展 反射动态 依照字符串
//Reflaction + 其他eg:单例 or 带参数的
//-》单例 测试
Singletion singletion = Singletion.get_Singletion();
//反射调用构造函数!!!牛逼
//单例是被初始化成了很多个不同!!的对象 破坏了单例
Assembly assembly1 = Assembly.Load("zhazha.DB.Singleton");
Type type1= assembly1.GetType("zhazha.DB.Singleton.Singletion");
Singletion singletion1=(Singletion)Activator.CreateInstance(type1, true); //单例必须为true
Singletion singletion2=(Singletion)Activator.CreateInstance(type1, true); //单例必须为true
Singletion singletion3=(Singletion)Activator.CreateInstance(type1, true); //单例必须为true
Console.ReadLine();
}
}
}
含参数构造
1.新建一个类
using System;
using zhazha.DB.Interface;
namespace zhazha.DB.MutiTest
{
public class MutiTestClass : IDBHelper
{
int a;
int b;
public MutiTestClass(int a,int b)
{
this.a = a;
this.b = b;
}
public void Query()
{
Console.WriteLine($"{a},{b}");
}
}
}
2.反射创建
//带构造参数的 反射实例化
Assembly assembly3 = Assembly.Load(" zhazha.DB.MutiTest");
Type type= assembly3.GetType(" zhazha.DB.MutiTest.MutiTestClass");
MutiTestClass mutiTestClass = (MutiTestClass)Activator.CreateInstance(type, new object[]{1,2}); //利用object数字的方式 如果传string "12","13"类似这样就行
mutiTestClass.Query();
运行图片
![](https://img-blog.csdnimg.cn/20200326143540347.png