前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >dotnet C# 如果在构造函数抛出异常 是否可以拿到对象赋值的变量

dotnet C# 如果在构造函数抛出异常 是否可以拿到对象赋值的变量

作者头像
林德熙
发布于 2021-12-24 06:24:53
发布于 2021-12-24 06:24:53
95800
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

如果使用某个变量去获取某个类型的对象创建,但是在这个类型的构造函数调用时抛出异常,请问此变量是否可以拿到对应的对象

如下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void F1()
        {
            Foo foo = null;
            try
            {
                foo = new Foo();
            }
            catch
            {
                // 忽略
            }
        }

    class Foo
    {
        public Foo()
        {
            throw new Exception("lindexi is doubi");
        }

        ~Foo()
        {
        }
    }

请问在执行完成 F1 函数前,在 F1 函数定义的 foo 变量是什么,是空,还是 Foo 对象

答案自然是空,原因是在 .NET 运行时的逻辑是先分配对象内存空间,然后再调用对象的构造函数,接着将对象赋值给到 foo 变量

而在进行第二步时就炸了,自然就不会给 foo 变量赋值

本文会经常更新,请阅读原文: https://blog.lindexi.com/post/dotnet-C-%E5%A6%82%E6%9E%9C%E5%9C%A8%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0%E6%8A%9B%E5%87%BA%E5%BC%82%E5%B8%B8-%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%8B%BF%E5%88%B0%E5%AF%B9%E8%B1%A1%E8%B5%8B%E5%80%BC%E7%9A%84%E5%8F%98%E9%87%8F.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
dotnet C# 如果在构造函数抛出异常 析构函数是否会执行
请问以上代码的 ~Foo 是否可以在垃圾回收执行,或者说在构造函数里面抛出异常,是否这个对象可以被垃圾回收
林德熙
2021/12/24
5030
dotnet C# 反射扫描程序集所有类型会不会触发类型静态构造函数
在 dotnet 里面,有很多框架都喜欢扫描程序集进行初始化逻辑,在扫描程序集的所有类型的时候,相当于碰到所有类型。而某个类型的静态构造函数将会在某个类型被使用之前被 CLR 调用,那么扫描类型是否会触发此类型的静态构造函数的调用?答案是不会的
林德熙
2021/10/18
7100
dotnet C# 只创建对象不调用构造函数方法
有时我期望只是创建出对象,但是不要调用对象的构造方法,可以通过使用 FormatterServices 的 GetUninitializedObject 函数来实现只创建对象不调用构造函数方法
林德熙
2021/12/24
8670
dotnet C# 多线程集合的 Linq 获取值同时写入集合将会抛出异常
在集合变更,无论是使用 foreach 遍历还是使用 Linq 语句,即使是 FirstOrDefault 获取第一项,都会失败
林德熙
2021/12/24
5240
dotnet C# 多次对一个对象调用构造函数会发生什么
今天来玩一点变态的,使用反射获取到某个类型的构造函数,接着多次对此类型的某个对象调用构造函数方法。请问此时会发生什么
林德熙
2021/09/10
8220
dotnet C# 在 finally 抛异常会发生什么
如果我在一个方法的 finally 里面抛出异常,而在 try 里面也抛出,那在上层拿到的是什么
林德熙
2021/12/24
3310
dotnet C# 应用程序进程创建太多线程将会抛出 OutOfMemoryException 异常
本文记录一个 dotnet 的特性,在应用程序快速创建大量线程的时候,将会因为线程创建时没有足够的资源而创建失败,此时将会抛出 OutOfMemoryException 异常,但实际进程占用内存不多
林德熙
2021/09/23
9900
dotnet 在析构函数调用 ThreadLocal 也许会抛出对方已释放
我在不自量力做一个数组池,就是为了减少使用 System.Buffers.dll 程序集,然而在数组池里面,所用的 ThreadLocal 类型,在我对象析构函数进行归还数组时,抛出了无法访问已释放对象
林德熙
2021/12/01
7760
dotnet 在析构函数调用 ThreadLocal 也许会抛出对方已释放
dotnet 使用 Newtonsoft.Json 输出枚举首字符小写
实现方法是加上 JsonConverterAttribute 特性,传入 StringEnumConverter 转换器,再加上参数设置首字符小写
林德熙
2021/11/22
6360
dotnet C# 使用无捕获的委托可以获得编译器缓存减少对象创建
本文也叫跟着 Stephen Toub 大佬学性能优化系列,这是我从 Stephen Toub 大佬给 WPF 框架做性能优化学到的知识,通过让委托无捕获来进行性能优化
林德熙
2021/12/24
5140
dotnet C# 使用无捕获的委托可以获得编译器缓存减少对象创建
dotnet C# 使用 EqualityComparer 提升泛型值类型相等判断性能
本文也叫跟着 Stephen Toub 大佬学性能优化系列,这是我从 Stephen Toub 大佬给 WPF 框架做性能优化学到的知识,通过 EqualityComparer 静态类的相等方法来优化值类型相等判断性能
林德熙
2021/12/24
8210
dotnet C# 给结构体字段赋值非线程安全
在 dotnet 运行时中,给引用对象进行赋值替换的时候,是线程安全的。给结构体对象赋值,如果此结构体是某个类的成员字段,那么此赋值不一定是线程安全的。是否线程安全,取决于结构体的大小,取决于此结构体能否在一次原子赋值内完成
林德熙
2021/09/10
9630
dotnet C# 给结构体字段赋值非线程安全
C# 在 构造函数添加 CallerMemberName 会怎样
在 C# 中有一个特性 CallerMemberName 可以给方法知道调用这个方法的方法名,在 UWP 中用这个特性很多,特别是在使用 MVVM 绑定
林德熙
2019/03/13
1K0
C# 在 构造函数添加 CallerMemberName 会怎样
dotnet 运行时获取某类型的对象占用内存大小
本文将告诉大家一个黑科技方法在运行时动态获取对象本身占用空间,不包括对象引用的其他对象的空间大小的方法
林德熙
2021/04/30
1.2K0
VisualStudio 在 DebuggerDisplay 的属性更改业务逻辑将会让调试和非调试下逻辑不同
本文记录我写的逗比代码,我在 DebuggerDisplay 对应的属性的 get 方法上,在这个方法里面修改了业务逻辑,如修改界面元素,此时我在 VisualStudio 断点调试下和非断点调试下的行为不相同
林德熙
2021/12/24
4240
Scrapy笔记三 自动多网页爬取-本wordpress博客所有文章
学习自http://blog.csdn.net/u012150179/article/details/34486677
十四君
2019/11/27
8110
ApacheCN 数据科学/人工智能/机器学习知识树 2019.2
【主页】 apachecn.org 【Github】@ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台微博:@ApacheCN 知乎:@ApacheCN CSDN 简书 OSChina 博客园 我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI)的爱好者! 合作or侵权,请联系【fonttian】<fonttian@gmail.com> | 请抄送一份到 <apachecn@163.com> 预处理 + [离散化](https://git
ApacheCN_飞龙
2019/02/13
4990
dotnet 集成测试 SmartSql 存在静态量导致多个主机启动提示 Alias 已存在
在集成测试中,我采用单个进程开启多个主机,可以理解为一个用例开启一次主机。但是在我使用到 SmartSql 的功能时,我发现在一个主机关闭之后,再开启下一个主机,会因为使用了相同的别名而提示 SmartSql.Alias:[SmartSql] already exist 错误。本文告诉大家如何解决此问题
林德熙
2020/12/31
6430
APP热搜榜接口提供 --- 百度
目的地-Destination
2024/08/07
1730
APP热搜榜接口提供 --- 百度
希沃白板如何在公式里面输入绝对值符号
在希沃白板中,可以很方便使用学科工具里面的公式工具,在希沃白板画布中插入公式元素。本文来告诉大家如何在希沃白板的公式工具中,插入带绝对值符号的公式
林德熙
2021/04/16
1.4K0
希沃白板如何在公式里面输入绝对值符号
推荐阅读
相关推荐
dotnet C# 如果在构造函数抛出异常 析构函数是否会执行
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验