【发布时间】:2019-06-03 07:45:14
【问题描述】:
我是 C# 新手,只是关于默认构造函数和自动属性的问题。基于关于stackoverflow的一个问题: How can I set the value of auto property backing fields in a struct constructor?
所以我们有以下结构
public struct SomeStruct
{
public SomeStruct(String stringProperty, Int32 intProperty)
{
this.StringProperty = stringProperty;
this.IntProperty = intProperty;
}
public String StringProperty { get; set; }
public Int32 IntProperty { get; set; }
}
但是为什么它在没有:this() 调用默认构造函数的情况下对我来说编译得很好?
另一个问题是为什么同样的规则不适用于类?你能有一个没有默认构造函数的自动属性吗?
【问题讨论】:
-
结构总是有一个默认的构造函数。
-
我可能错了,但 IIRC 有旧版本的 C#,除非您添加
: this(),否则它不会编译。但是...由于分配给自动道具显然确实分配给了该字段,IIRC 现在可以让您使用。试图找出何时/如果这发生了变化。引文 - 这是一篇关于它不起作用工作的博客:techiesimon.com/2014/01/16/… - 编辑,它是 C# 6 - stackoverflow.com/a/420441/23354 -
你想做什么?防止调用者创建无效值?还是阻止创建默认值?结构是值类型,因此它们始终具有非空默认值和默认构造函数。检查 C# 编程指南中的Using Structs
-
@Panagiotis Kanavos 你能检查一下我帖子中的原始问题,看看为什么原作者确实收到了编译错误
-
附带说明:可变结构是一个糟糕的主意;
public readonly struct SomeStruct { public string StringProperty {get;} public int Int32Property {get;} public SomeStruct(string stringProperty, int int32Property) { StringProperty = stringProperty; Int32Property = int32Property; }}你会好多