Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有默认构造函数和自动属性,为什么它仍然编译_C#_.net_Oop - Fatal编程技术网

C# 没有默认构造函数和自动属性,为什么它仍然编译

C# 没有默认构造函数和自动属性,为什么它仍然编译,c#,.net,oop,C#,.net,Oop,我不熟悉C,只是一个关于默认构造函数和自动属性的问题。根据有关stackoverflow的问题: 我们有下面的结构 public struct SomeStruct { public SomeStruct(String stringProperty, Int32 intProperty) { this.StringProperty = stringProperty; this.IntProperty = intProperty; } public

我不熟悉C,只是一个关于默认构造函数和自动属性的问题。根据有关stackoverflow的问题:

我们有下面的结构

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?
另一个问题是为什么相同的规则不适用于类?你能在没有默认构造函数的情况下拥有一个自动属性吗?

最终,结构在作为访问所需的完整值进行处理之前,对确定赋值有严格的规则;在C 6之前,编译器没有将构造函数中的Auto属性视为明确赋值的一部分,因此调用属性设置器的访问被认为无效。由于C 6,它将自动属性视为结构构造函数中明确赋值的一部分,所以所示的代码现在是有效的。 因为它对任何最近的编译器都有效,即使您将语言级别设置为早于C 6,它也会编译

但是,请注意,这只适用于构造函数内部。以下内容仍然无效,但可用于裸字段:

SomeStruct x; x、 StringProperty=abc;//CS0165未分配局部变量x的使用 x、 IntProperty=123; SomeMethodx;
结构总是有一个默认构造函数。我可能错了,但是IIRC有一些旧版本的C,除非你添加:this,否则它不会编译。但是由于指定给自动道具显然会指定给字段,IIRC it现在允许您。正在尝试查找此更改的时间/情况。引文-这里有一个博客讨论这个问题,但它不起作用:-编辑,它是C6-你想做什么?是否防止调用方创建无效值?或者阻止创建默认值?结构是值类型,因此它们始终具有非空的默认值和默认构造函数。签入C编程Guide@PanagiotisKanavos你能检查一下我帖子中的原始问题,看看原始作者为什么会收到编译错误作为旁注:可变结构是一个糟糕的想法;使用public readonly struct SomeStruct{public string StringProperty{get;}public int Int32Property{get;}public SomeStructstring StringProperty,int Int32Property{StringProperty=StringProperty;Int32Property=Int32Property;}