Csharp/C#教程:隐藏struct上的无参数构造函数分享


隐藏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

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐