隐藏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坐标来新建位置
但是,无参数构造函数始终可用
我不能把它私有化。 甚至将其定义为公开
我已经读过这个为什么我不能在.NET中为结构定义默认构造函数?
但它并没有真正的帮助
如果这是不可能的 – 检测我被传递的位置是否具有值的最佳方法是什么?
明确检查每个属性字段? 有一种更光滑的方式吗?
谢谢
不,你不能这样做。 如你所说,之前已经提出了类似的问题 – 我认为答案很明确,你不能这样做。
您可以 为结构创建私有无参数构造函数 ,但不能在C#中创建。 但是,即使你这样做也没有用 – 因为你可以轻松地解决它:
MyStruct[] tmp = new MyStruct[1]; MyStruct gotcha = tmp[0];
这将是MyStruct的默认值 – “全零”值 – 无需调用构造函数。
您可以轻松地向结构中添加Validate方法,并在每次收到一个作为参数时调用它。
不能隐藏它。 结构无法重新定义零arg构造函数,因此无法重新定义其可见性。
那么一个结构实际上是一个关于内存将如何存在的声明。
即使使用对象,也会声明对象指针IS,无论它是否为null。
你无法隐藏构造函数的原因是因为结构要求CLR可以在内部创建它,它必须这样做。
您可以将此结构转换为对象以实现此任务。 或者使用静态分析以确保在使用之前初始化它?
struct point { int xpos; int ypos; }
有一个谷歌的不可变对象,这似乎是你的后。 我相信他们希望将这个function(但不是在C#4中)添加到语言本身,因为这是一个常见的要求。 这里是否特定需要结构?
您不能使用私有无参数构造函数创建结构,甚至不能声明无参数构造函数。 你必须把它改成一个类。 结构不允许声明无参数构造函数。
来自MSDN上的Structs Tutorial :
结构可以声明构造函数,但它们必须使用参数。 声明struct的默认(无参数)构造函数是错误的。 Struct成员不能有初始化器。 始终提供默认构造函数以将struct成员初始化为其默认值。
来自MSDN上的C#规范 :
11.3类和结构的差异
结构在几个重要方面与类不同:
上述就是C#学习教程:隐藏struct上的无参数构造函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1003622.html