是否可以在 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/