c# - 在结构上隐藏无参数构造函数

标签 c# .net struct

是否可以在 C# 中对用户隐藏无参数构造函数?

我想强制他们总是使用带参数的构造函数

例如这个位置结构

public struct Position
{
    private readonly int _xposn;
    private readonly int _yposn;
    
    public int Xposn
    {
        get { return _xposn; }
    }

    public int Yposn
    {
        get { return _yposn; }
    }

    public Position(int xposn, int yposn)
    {
        _xposn = xposn;
        _yposn = yposn;
    }        
}

我只希望用户能够通过指定 x 和 y 坐标来新建一个 Position。

但是,无参数构造函数始终可用。

我无法将其设为私有(private)。或者甚至将其定义为公开。

我读过这个: Why can't I define a default constructor for a struct in .NET?

但这并没有真正的帮助。

如果这不可能 - 检测传递给我的 Position 是否有值的最佳方法是什么?

明确检查每个属性字段?有没有更好的方法?

最佳答案

不,你不能这样做。正如你所说,similar question之前有人问过 - 我认为答案很明确,你做不到。

可以 create a private parameterless constructor for a struct ,但不是在 C# 中。但是,即使您这样做也无济于事 - 因为您可以轻松解决它:

MyStruct[] tmp = new MyStruct[1];
MyStruct gotcha = tmp[0];

这将是 MyStruct 的默认值——“全零”值——无需调用构造函数。

诚然,您可以轻松地向您的结构添加一个 Validate 方法,并在每次收到一个作为参数时调用该方法。

关于c# - 在结构上隐藏无参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/535328/

相关文章:

c# - 异步/等待、TAP 和 EAP

c# - 未抛出 OptimisticConcurrencyException : Possible reason: UpdateCommand

c# - 是否可以通过编程方式设置 MasterType?

c - Malloc 结构数组,字段中的数据未正确保存

c++ - C/C++ 结构,在缓冲区中包含位字段

c# - 覆盖 C# 结构中的默认值

C# SqlCommand - 不能为列名使用参数,如何解决?

c# - 如何在 .net 核心 JwtBearerOptions.Events 中使用依赖注入(inject)?

c# - 在 asp.net 中克服发送电子邮件延迟的方法

c# - 如何从另一个 View 模型实例化和显示一个 ViewModel