域名备案掉了网站还可以用吗/如何去推广一个app
文章目录
- 一、使用 Activator.CreateInstance 创建实例
- 1、使用 Activator.CreateInstance 的优点和缺点
- 2、使用 Activator.CreateInstance 的代码示例
- 二、使用 Type.InvokeMember 创建实例
- 1、使用 Type.InvokeMember 的优点和缺点
- 2、使用 Type.InvokeMember 的代码示例
- 三、Activator.CreateInstance 与 Type.InvokeMember 的基准测试
- 1、反射性能的 BenchmarkDotNet 设置
- 2、Activator.CreateInstance 与 Type.InvokeMember对比
- 四、Activator.CreateInstance 与 Type.InvokeMember 总结
一、使用 Activator.CreateInstance 创建实例
在 C# 中,Activator.CreateInstance方法是开发人员通过反射创建实例的最常用方法之一。它允许在运行时创建类的新实例,即使事先不知道它们的具体类型。此方法属于类,System.Activator通常用于需要动态实例化的场景。
的主要目的Activator.CreateInstance是动态创建类的实例 — 因此,如果您在编译时可以访问该类型,那么您可能没有充分的理由使用它!Activator.CreateInstance在要创建的对象类型直到运行时才知道的情况下,例如在加载插件或使用动态加载的程序集时,它特别有用。它消除了对硬编码显式构造函数的需求,并提供了对象创建的灵活性。
1、使用 Activator.CreateInstance 的优点和缺点
Activator.CreateInstance与普通对象实例相比,使用有几个优点:
允许后期绑定对象创建,这在对象类型在运行时可能发生变化的情况下很有用。
可以通过消除使用 switch 语句或 if-else 条件来处理不同对象类型的需求来简化代码库。
提供一种动态且可扩展的对象创建方法。
但是,使用时也需要考虑一些缺点Activator.CreateInstance:
由于运行时解析类型涉及额外的步骤,因此与直接实例化相比,使用反射的性能开销可能更高。
Activator.CreateInstance 通常依赖于公共无参数构造函数的存在。否则,您需要始终知道要传入哪些参数 — 如果您要针对许多不同类型动态执行此操作,则具有挑战性。
由于没有编译时检查签名兼容性,因此在修改目标类型时容易出现错误。
2、使用 Activator.CreateInstance 的代码示例
以下代码示例演示了如何使用Activator.CreateInstance动态创建实例:
// Example 1: Creating an instance of a known type
Type objectType = typeof(MyClass);
object instance = Activator.CreateInstance(objectType);
在示例 1 中,我们使用typeof获取Type代表已知类的对象MyClass。然后,我们使用Activator.CreateInstance创建 的新实例MyClass。
// Example 2: Creating an instance of an unknown type at runtime
string typeName = "MyNamespace.MyClass";
Type unknownType = Type.GetType(typeName);
object dynamicInstance = Activator.CreateInstance(unknownType);
在示例 2 中,我们有一个由字符串表示的未知类型typeName。我们使用根据提供的类型名称Type.GetType获取对象。最后,用于创建动态确定类型的新实例。TypeActivator.CreateInstance
我们再看一个例子,其中我们可以为构造函数传递参数——同样,假设我们知道签名,因为我们无法在编译时通过这种方法证明它:
// Example 3: Creating an instance with constructor parameters:
string typeName = "MyNamespace.MyClass";
Type unknownType = Type.GetType(typeName);
Object dynamicInstance = Activator.CreateInstance(unknownType,new[]{"Hello World!", // this is the single string parameter!});
二、使用 Type.InvokeMember 创建实例
Type.InvokeMember是 DotNet 中 Reflection 提供的一种可用方法,允许我们动态创建类型的实例。它提供了一种灵活的方法,可以通过利用手头类型的信息在运行时实例化对象。出于这些原因,它在如何利用它来创建对象实例方面非常相似。
1、使用 Type.InvokeMember 的优点和缺点
Type.InvokeMember与普通对象实例相比,使用以下方法具有一些普遍的优点:
允许后期绑定对象创建,这在对象类型在运行时可能发生变化的情况下很有用。
可以通过消除使用 switch 语句或 if-else 条件来处理不同对象类型的需求来简化代码库。
提供一种动态且可扩展的对象创建方法。
等一下……这不就是我们上面看到的那个列表吗Activator.CreateInstance?没错。所以我们就简短地介绍一下这部分。除非我们开始研究性能,否则我们不会看到任何大的差异——也许在某些非常特殊的边缘情况下。但总的来说,两者都提供了非常全面的方法来动态实例化对象,而 InvokeMember 有点冗长,因为它处理的不仅仅是构造函数。
在进行基准测试之前,我们先检查一些代码。
2、使用 Type.InvokeMember 的代码示例
下面是一个示例代码片段,演示了如何Type.InvokeMember动态创建类型实例:
// Example 1: Creating an instance of a known type
Type objectType = typeof(MyClass);
var instance = objectType
.InvokeMember(null,BindingFlags.CreateInstance,null,null,null);
在上面的例子中,我们首先获取代表类“MyClass”的 Type 对象。然后我们使用 Type.InvokeMember 创建该类的实例并将其分配给“instance”变量。这使我们能够动态创建“MyClass”的对象,而无需明确指定类名。
而在编译时不知道类的情况下执行此操作与以前非常相似。但这部分与 InvokeMember 无关:
// Example 2: Creating an instance of an unknown type at runtime
string typeName = "MyNamespace.MyClass";
Type unknownType = Type.GetType(typeName);
var instance = objectType.InvokeMember(null,BindingFlags.CreateInstance,null,null,null);
最后,如果我们需要传递一些构造函数参数,那么我们也可以这样做:
// Example 3: Creating an instance with constructor parameters:
string typeName = "MyNamespace.MyClass";
Type unknownType = Type.GetType(typeName);
var instance = objectType.InvokeMember(null,BindingFlags.CreateInstance,null,null,new[]{"Hello World!",});
三、Activator.CreateInstance 与 Type.InvokeMember 的基准测试
1、反射性能的 BenchmarkDotNet 设置
我认为我们可以在三种情况下使用 BenchmarkDotNet 运行基准测试:
无参数构造函数类
具有单个字符串参数的构造函数
具有单个字符串参数的主构造函数
我想加入主构造函数,因为我知道这个特性会招致很多人的反对——最好还是获取一些数据吧!以下是我们将要实例化的类,供参考:
public class ParameterlessClass
{
}public class ClassicStringParameterClass
{private readonly string _value;public ClassicStringParameterClass(string value){_value = value;}
}public class PrimaryConstructorStringParameterClass(string _value)
{
}
至于基准测试,让我们看看我们将要运行的以下类。请记住,我使用它Activator.CreateInstance作为基线是因为我想比较Activator.CreateInstancevs Type.InvokeMember— 我只包括正常的构造函数路径作为参考。您也可以在 GitHub 上找到所有这些代码:
[ShortRunJob]
public class ParameterlessClassBenchmarks
{private Type? _type;[GlobalSetup]public void GlobalSetup(){_type = typeof(ParameterlessClass);}[Benchmark]public void Constructor(){var instance = new ParameterlessClass();}[Benchmark(Baseline = true)]public void Activator_Create_Instance(){var instance = Activator.CreateInstance(_type!);}[Benchmark]public void Type_Invoke_Member(){var instance = _type!.InvokeMember(null,BindingFlags.CreateInstance,null,null,null);}
}[ShortRunJob]
public class ClassicStringParameterClassBenchmarks
{private Type? _type;[GlobalSetup]public void GlobalSetup(){_type = typeof(ClassicStringParameterClass);}[Benchmark]public void Constructor(){var instance = new ClassicStringParameterClass("Hello World!");}[Benchmark(Baseline = true)]public void Activator_Create_Instance(){var instance = Activator.CreateInstance(_type!,new[]{"Hello World!",});}[Benchmark]public void Type_Invoke_Member(){var instance = _type!.InvokeMember(null,BindingFlags.CreateInstance,null,null,new[]{"Hello World!",});}
}[ShortRunJob]
public class PrimaryConstructorStringParameterClassBenchmarks
{private Type? _type;[GlobalSetup]public void GlobalSetup(){_type = typeof(PrimaryConstructorStringParameterClass);}[Benchmark]public void Constructor(){var instance = new PrimaryConstructorStringParameterClass("Hello World!");}[Benchmark(Baseline = true)]public void Activator_Create_Instance(){var instance = Activator.CreateInstance(_type!,new[]{"Hello World!",});}[Benchmark]public void Type_Invoke_Member(){var instance = _type!.InvokeMember(null,BindingFlags.CreateInstance,null,null,new[]{"Hello World!",});}
}
2、Activator.CreateInstance 与 Type.InvokeMember对比
当我们将这两种反射方法进行对比时,获胜者是…视情况而定。在最常见的一种情况下,我会说有一个非常明显的赢家,但对于其他情况,它们非常接近。但请务必阅读结论,因为这不是故事的结局。
我们要研究的第一个基准是无参数构造函数:
Activator.CreateInstance 与 Type.InvokeMember - 无参数构造函数的基准
这里明显胜出:Activator.CreateInstance几乎高出一个数量级。如果你的构造函数没有任何参数,那么最好的选择就是这个。
接下来,让我们检查Activator.CreateInstance一下Type.InvokeMember接受单个字符串参数的构造函数:
Activator.CreateInstance 与 Type.InvokeMember - 带参数的经典构造函数的基准
这两款车基本上势均力敌,尽管Activator.CreateInstance略胜一筹,但差距几乎可以忽略不计。
要查看的最后一个场景是主构造函数,在本例中,主构造函数接受一个字符串参数:
Activator.CreateInstance 与 Type.InvokeMember - 主构造函数的基准
获胜者:Type.InvokeMember,但只领先一点点。非常有趣的是,这与我们在之前的基准测试中看到的结果相反!
四、Activator.CreateInstance 与 Type.InvokeMember 总结
当谈到Activator.CreateInstancevs的性能结果时Type.InvokeMember,无参数构造函数的情况明显胜出:Activator.CreateInstance。但是当我们开始需要参数或使用带参数的主构造函数时,它开始均衡甚至有利于Type.InvokeMember。
相关文章:

Activator.CreateInstance 与 Type.InvokeMember的区别
文章目录 一、使用 Activator.CreateInstance 创建实例1、使用 Activator.CreateInstance 的优点和缺点2、使用 Activator.CreateInstance 的代码示例 二、使用 Type.InvokeMember 创建实例1、使用 Type.InvokeMember 的优点和缺点2、使用 Type.InvokeMember 的代码示例 三、Ac…...

Java18+App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发家政服务
Java18App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发 家政服务 家政服务是一个专为家政服务人员设计的平台,该平台旨在提供便捷、高效的工作机会,同时确保服务质量和客户体验。 以下是关于家政服务师…...

【MySQL】探索 MySQL 的 GROUP_CONCAT 函数
缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 🎵 邓紫棋《光年之外》 什么是 GRO…...

SpringBoot整合RabbitMQ (持续更新中)
RabbitMQ 官网地址:RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ 与 Erlang 版本兼容关系 3.13.0 26.0 26.2.x The 3.13 release series is compatible with Erlang 26. OpenSSL 3 support in Erlang is considered to be mature and ready for…...

瑞鑫RK3588 画中画 OSD 效果展示
这些功能本来在1126平台都实现过 但是迁移到3588平台之后 发现 API接口变化较大 主要开始的时候会比较费时间 需要找到变动接口对应的新接口 之后 就比较好操作了 经过几天的操作 已实现 效果如下...

【全开源】防伪溯源一体化管理系统源码(FastAdmin+ThinkPHP+Uniapp)
🔍防伪溯源一体化管理系统:守护品质,追溯无忧 一款基于FastAdminThinkPHP和Uniapp进行开发的多平台(微信小程序、H5网页)溯源、防伪、管理一体化独立系统,拥有强大的防伪码和溯源码双码生成功能࿰…...

自然语言处理:第三十三章FILCO:过滤内容的RAG
文章链接: [2311.08377] Learning to Filter Context for Retrieval-Augmented Generation (arxiv.org) 项目地址: zorazrw/filco: [Preprint] Learning to Filter Context for Retrieval-Augmented Generaton (github.com) 在人工智能领域,尤其是在开放域问答和事…...

js:flex弹性布局
目录 代码: 1、 flex-direction 2、flex-wrap 3、justify-content 4、align-items 5、align-content 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewp…...

Pytorch常用函数用法归纳:创建tensor张量
1.torch.arange() (1)函数原型 torch.arange(start,end,step,*,out,dtype,layout,device,requires_grad) (2)参数说明: 参数名称参数类型参数说明startNumber起始值,默认值为0endNumber结束值,取不到,为开区间stepNumber步长值࿰…...

WPF前端:一个纯Xaml的水平导航栏
效果图: 代码: 1、样式代码,可以写在窗体资源处或者样式资源文件中 <Style x:Key"MenuRadioButtonStyle" TargetType"{x:Type RadioButton}"><Setter Property"FontSize" Value"16" />…...

谷粒商城实战(033 业务-秒杀功能4-高并发问题解决方案sentinel 1)
Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第326p-第p331的内容 关注的问题 sentinel(哨兵) sentinel来实现熔断、降级、限流等操作 腾讯开源的tendis,…...

STM32项目分享:智能家居(机智云)系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...

游戏盾之应用加速,何为应用加速
在数字化时代,用户对于应用程序的防护要求以及速度和性能要求越来越高。为了满足用户的期望并提高业务效率,应用加速成为了不可忽视的关键。 应用加速是新一代的智能分布式云接入系统,采用创新级SD-WAN跨域技术,针对高防机房痛点进…...

Java 基础面试题
文章目录 重载与重写抽象类与接口面向对象a a b 与 a b 的区别final、finalize、finallyString、StringBuild、StringBuffer位运算反射 重载与重写 重载:是在同一个类中,方法名相同,方法参数类型,个数不同,返回类型…...

Nginx 1.26.0 爆 HTTP/3 QUIC 漏洞,建议升级更新到 1.27.0
据悉,Nginx 1.25.0-1.26.0 主线版本中涉及四个与 NGINX HTTP/3 QUIC 模块相关的中级数据面 CVE 漏洞,其中三个为 DoS 攻击类型风险,一个为随机信息泄漏风险,影响皆为允许未经身份认证的用户通过构造请求实施攻击。目前已经紧急发布…...

uniadmin引入iconfont报错
当在uniadmin中引入iconfont后,出现错误: [plugin:vite:css] [postcss] Cannot find module ‘E:/UniAdmin/uniAdmin/static/fonts/iconfont.woff2?t1673083050786’ from ‘E:\UniAdmin\uniAdmin\static\fonts\iconfont.css’ 这是需要更改为绝对路径…...

Vue3【三】 使用TS自己编写APP组件
Vue3【三】 使用TS自己编写APP组件 运行截图 目录结构 注意目录层级 文件源码 APP.vue <template><div class"app"><h1>你好世界!</h1></div> </template><script lang"ts"> export default {name:App //组…...

数字IC后端物理验证PV | TSMC 12nm Calibre Base Layer DRC案例解析
基于TSMC 12nm ARM A55 upf flow后端设计实现训练营将于6月中旬正式开班!小班教学!目前还有3个名额,招满为止!有需要可以私信小编 ic-backend2018报名。吾爱IC社区所有训练营课程均为直播课! 这个课程支持升级成双核A…...

Echarts 在指定部分做文字标记
文章目录 需求分析1. demo1样式调整2. demo22. demo3 定位解决需求 实现在Echarts的折线图中,相同Y值的两点之间显示’abc’ 分析 1. demo1 使用 ECharts 的 markLine 功能来在相邻两个点之间添加标记。其中,我们通过设置标记的 yAxis 和 label 来控制标记的位置和显示内…...

如何发布自己的npm插件包
随着JavaScript在前端和后端的广泛应用,npm(Node Package Manager)已成为JavaScript开发者不可或缺的工具之一。通过npm,开发者可以轻松共享和使用各种功能模块,极大地提高了开发效率。那么,如何将自己开发的功能模块发布为npm插件包,与全球的开发者共享呢?本文将进行全…...

AI和机器人引领新一轮农业革命
AI和机器人技术在农业领域的应用正在迅速发展,未来它们可能会实现厘米级精度的自主耕作。 精确种植:AI算法可以分析土壤条件、气候数据和作物生长周期,以决定最佳种植地点和时间。 土壤管理:利用传感器和机器学习,机器…...

【Kubernetes】三证集齐 Kubernetes实现资源超卖(附镜像包)
目录 插叙前言一、思考和原理二、实现步骤0. 资料包1. TLS证书签发2. 使用 certmanager 生成签发证书3. 获取secret的内容 并替换CA_BUNDLE4.部署svc deploy 三、测试验证1. 观察pod情况2. 给node 打上不需要超售的标签【可以让master节点资源不超卖】3. 资源实现超卖4. 删除还…...

国产Sora免费体验-快手旗下可灵大模型发布
自从OpenAI公布了Sora后,震爆了全世界,但由于其技术的不成熟和应用的局限性,未能大规模推广,只有零零散散的几个公布出来的一些视频。昨日,快手成立13周年,可灵(Kling)大模型发布&am…...

linux嵌入式设备测试wifi信号强度方法
首先我们要清楚设备具体链接在哪个wifi热点上 执行:nmcli dev wifi list rootubuntu:/home/ubuntu# nmcli dev wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS > * 14:EB:08:51:7D:20 wifi22222_5G Infr…...

【名词解释】Unity的Inputfield组件及其使用示例
Unity的InputField组件是一个UI元素,它允许用户在游戏或应用程序中输入文本。InputField通常用于创建表单、登录界面或任何需要用户输入文本的场景。它提供了多种功能,比如文本验证、占位符显示、输入限制等。 功能特点: 文本输入ÿ…...

Android 安装调试 TelephonyProvider不生效
直接安装TelephonyProvider的时候,(没有重启)发现数据库没有生效。 猜测应该是原本的数据库没有删除后重建更新。 解决方法:杀掉phone进程 adb shell am force-stop com.android.phone 查看device进程 adb shell ps | grep <…...

【C++】STL中List的基本功能的模拟实现
前言:在前面学习了STL中list的使用方法,现在我们就进一步的讲解List的一些基本功能的模拟实现,这一讲博主认为是最近比较难的一个地方,各位一起加油。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 …...

C语言基础——函数
ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 前言 一、函数的概念 二、库函数 2.1 库函数和头文件 2.2 库函数的使用/…...

《精通ChatGPT:从入门到大师的Prompt指南》第1章:认识ChatGPT
第1章:认识ChatGPT 1.1 ChatGPT是什么 ChatGPT,全称为Chat Generative Pre-trained Transformer,是由OpenAI开发的一种先进的自然语言处理模型。它利用了深度学习中的一种技术——Transformer架构,来生成类人文本。ChatGPT通过对…...

智慧视觉怎么识别视频?智慧机器视觉是通过什么步骤识别视频的?
智慧视觉功能怎么识别视频?智慧视觉是搭载在智能设备比如手机、AI盒子、机器视觉系统上的一个应用程序或特性,采用计算机视觉和人工智能的技术来识别图像或视频中的内容。如果想了解视频识别,就要明白智慧视觉功能会涉及的以下几个关键步骤和…...