zoukankan      html  css  js  c++  java
  • C# Activator.CreateInstance

    Activator 类

      包含用于在本地创建对象类型的方法。 无法继承此类。

      简单说 Activator.CreateInstance :使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。

      使用Activator.CreateInstance 的实际作用是什么呢?

      是因为 想创建一个方法 方法中传入一个类的名称 然后就能返回一个这个类的实例 ,这样的做法让程序有更高的拓展性

    //IObjcet.cs
    namespace Net.BLL.ActivatorCreateInstance
    {
        public interface IObjcet
        {
            string printName();
        }
    }
    //ClassExam.cs
    namespace Net.BLL.ActivatorCreateInstance
    {
        public class ClassExam : IObjcet
        {
            private string name = "default name";
            public ClassExam()
            {
    
            }
    
            public ClassExam(string name)
            {
                this.name = name;
            }
    
            public string printName()
            {
                var result = string.Empty;
    
                result += "" + this.ToString() + "'s name is:";
                result += "" + this.name;
    
                return result;
            }
        }
    }
    //TestCall.cs
    using System;
    
    namespace Net.BLL.ActivatorCreateInstance
    {
        public class TestCall
        {
            /*
                Activator 类
    
                包含用于在本地创建对象类型的方法。 无法继承此类。
                
                简单说 Activator.CreateInstance :使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。
                
                使用Activator.CreateInstance 的实际作用是什么呢?
                
                是因为 想创建一个方法 方法中传入一个类的名称 然后就能返回一个这个类的实例 ,这样的做法让程序有更高的拓展性,
    
             */
    
            public void Call()
            {
    
                //用传递参数来得到一个类的实例
    
                string itemType = "ClassExam";
                string assembleyName = this.GetType().Assembly.GetName().Name;//Net.BLL
                string nameSpace = this.GetType().Namespace;
    
                //用Activator .CreateInstance创建函数实例,默认的不带参数的构造函数
                IObjcet obj = (IObjcet)Activator.CreateInstance(Type.GetType($"{nameSpace}.{itemType},{assembleyName}"), null);
                //System.Type .GetType  命名空间.类名,程序集
                //Net.BLL.ActivatorCreateInstance.ClassExam
                var res01 = obj.printName();
    
                //调用ClassExam类的另一个带参数构造函数
                IObjcet obj2 = (IObjcet)System.Activator.CreateInstance(Type.GetType($"{nameSpace}.{itemType},{assembleyName}"), new string[] { "seted new name" });
                var res02 = obj2.printName();
            }
        }
    }
    //UnitTest1.cs
    
            [TestMethod]
            public void Test()
            {
                TestCall tc = new TestCall();
                tc.Call();
            }

     另一个示例,当前类操作

    namespace BLL.FraudScore.Tests
    {
        [TestClass()]
        public class BpFraudScoreTests
        {
            long queryRecordId { get; set; }
            PersonalCreditReport personalCreditReport { get; set; }
            QueryParameters parameters { get; set; }
    
            [TestInitialize]
            public void Initialize()
            {
                queryRecordId = 88888;
                parameters = new QueryParameters()
                {
                    ApplicantName = "张某某",
                    ApplicationNumber = "111111111111",
                    IdentifyNumber = "11010819931010444X",
                    IdentifyType = 1000115
                };
    
            }
    
            [TestMethod()]
            public void Test()
            {
                string itemType = "BpFraudScoreTests";
                string assembleyName = this.GetType().Assembly.GetName().Name;//UnitTest
                string nameSpace = this.GetType().Namespace;//BLL.FraudScore.Tests
                var temp01 = Type.GetType($"{nameSpace}.{itemType},{assembleyName}");//{Name = "BpFraudScoreTests" FullName = "BLL.FraudScore.Tests.BpFraudScoreTests"}
                BpFraudScoreTests temp02 = (BpFraudScoreTests)Activator.CreateInstance(temp01, null);
    
                temp02.Initialize();//初始化方法
    
                var t01 = temp02.queryRecordId;//任意变量
                var t02 = temp02.parameters;//任意变量
                var t03 = temp02.personalCreditReport;//任意变量
    
            }
        }
    
    }
  • 相关阅读:
    使用metasploit进行栈溢出攻击-2
    使用metasploit进行栈溢出攻击-1
    如何利用 Visual Studio 自带工具提高开发效率
    Visaul Studio 常用快捷键动画演示
    WinForm AutoComplete 输入提示、自动补全
    RTL2832U+R820T电视棒windows下安装sdr# 以及搭建ADS-B使用VirtualRadar看飞机的教程
    传说中的WCF(12):服务器回调有啥用
    传说中的WCF(11):会话(Session)
    传说中的WCF(10):消息拦截与篡改
    传说中的WCF(9):流与文件传输
  • 原文地址:https://www.cnblogs.com/hofmann/p/13815878.html
Copyright © 2011-2022 走看看