c# - 使 C# 6 struct 无参数构造函数不可用

标签 c# clr

C# 6 允许在结构上声明无参数构造函数。然而,它们必须是公开的,并且在某些情况下,人们想要强制其他开发人员使用参数化构造函数,所以我想知道从 CLR 的角度来看,通过在内部抛出异常来使无参数构造函数不可用是否可以,所以它看起来像那:

public struct Foo
{
    public Foo()
    {
        throw new InvalidOperationException("This constructor is not supported.");
    }

    public Foo(int i) { ... }
}

最佳答案

你可以的。至于这是否是一个好主意是相当主观的。 (我强烈反对使用它,但显然我不能阻止你这样做。)

如果您的目标是确保永远不会出现在不调用参数化构造函数的情况下构造对象的情况,并且永远不会将字段保留为默认值,那么这不会做到这一点。有一些方法,例如使用 default(Foo) 创建对象的实例而不调用任何用户定义的构造函数。

如果你问 CLR 是否会崩溃并且世界会因为你从 struct 的构造函数中抛出异常而崩溃成一个黑洞,那么不,那不会发生。当调用此构造函数时,它会抛出并沿着调用堆栈向上移动直到被捕获,就像任何其他抛出的异常一样。

关于c# - 使 C# 6 struct 无参数构造函数不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29105561/

相关文章:

c# - 使用 linq 选择匿名委托(delegate)

c# - 寻找用于检测可移动驱动器(USB 闪存)的 C# 代码

debugging - 用/CLR 编译的 MFC 项目中是否有任何类数限制

.net - 获取 SQL Server CLR 运行时中引发的错误的行号

c# - WPF:无法识别或无法从 XAML 访问整数 CLR 属性

c# - 为扫雷游戏动态创建一个游戏板

c# - 具有多选的 OpenFileDialog 框,.filenames 多次接收相同的名称

c# - 索引超出范围异常 :There is no row at position 0

c# - SomeDelegate.Invoke 究竟在哪里实现以及它是如何 "wired"到委托(delegate)类

.net - 新 .Net 流程的成本