让我们说我这样做......
$attributes = Attribute::whereHas('types', function ($query) {
$query->where('id', '<', '10');
})->orderByRaw("RAND()")->limit(5)
->get();
...因为,我知道当我的开发团队迁移到C#6.0时会发生这种情况。哪个优先/被使用(构造函数NewGuid()或属性NewGuid())以及为什么?什么时候我们应该使用一个与另一个作为最佳实践?
答案 0 :(得分:5)
自动属性初始化程序基本上是语法糖:
private Guid _customerID = Guid.NewGuid();
public Guid customerID
{
get { return _customerID; }
set { _customerID = value; }
}
所以实际问题是:首先运行的是字段初始值设定项还是构造函数。答案很长一段时间 - 首先运行字段初始化程序,然后运行构造函数。因此,在构造函数中编写的值将覆盖示例中字段初始值设定项的值。
答案 1 :(得分:3)
似乎第一个调用Auto-property初始值设定项,然后是构造函数。
我用LINQPad制作了一个小演示:
void Main()
{
new Test().Dump("result");
}
// Define other methods and classes here
class Test
{
public int MyProperty1 { get; set; } = 1.Dump("auto-prop init");
public Test()
{
MyProperty1 = 2.Dump(".ctor");
MyProperty2 = 2.Dump(".ctor");
}
public int MyProperty2 { get; set; } = 1.Dump("auto-prop init");
}
结果如下:
答案 2 :(得分:1)
它看起来像Autoproperty然后是构造函数。运行它显示1作为我假设构造函数覆盖初始值的值。
public class Customer
{
public Customer()
{
customerID = 1;
}
public int customerID { get; set; } = 2;
}