使用继承的GUID

时间:2014-05-08 10:16:12

标签: c# guid

任何人都可以解释使用如下语法的目的:

public ClassConstructor() : 
    this(Guid.NewGuid(), 0, new List<Transaction>(), "")
{
}

代码如下所示:

public BankAccount()
    : this(Guid.NewGuid(), 0, new List<Transaction>(), "")
{
    _transactions.Add(new Transaction(0m, 0m, "account created", DateTime.Now));
}

public BankAccount(Guid Id, decimal balance, IList<Transaction> transactions, string customerRef)
{
    AccountNo = Id;
    _balance = balance;
    _transactions = transactions;
    _customerRef = customerRef;
}

3 个答案:

答案 0 :(得分:4)

以下一行称为constructor initializer

public ClassConstructor(): this(Guid.NewGuid(), 0, new List(), "")

使用上面的行,每当调用参数less constructor ClassConstructor()时,它首先调用同一个类this(Guid.NewGuid(), 0, new List(), "")的参数化构造函数ClassConstructor,然后调用{{1}的代码/正文得到处理

答案 1 :(得分:1)

@JasonEvans答案实际上有点不对劲。他将basethis混合在一起。

您可以使用this将构造函数调用委托给该类范围内的另一个构造函数:

public class BankAccount
{
    // 1st constructor
    public BankAccount()
        : this(Guid.NewGuid(), 0, new List<Transaction>(), "")
    {
        _transactions.Add(new Transaction(0m, 0m, "account created", DateTime.Now));
    }

    // 2nd constructor
    public BankAccount(Guid Id, decimal balance, IList<Transaction> transactions, string customerRef)
    {
        AccountNo = Id;
        _balance = balance;
        _transactions = transactions;
        _customerRef = customerRef;
    }
}

在你的例子中,第一个构造函数在它自己执行之前委托它调用第二个构造函数。因此,在您的示例中,当调用默认构造函数时,BankAccount初始化为Transactions的空列表。在此之后,添加了第一个Transaction(&#34;创建的帐户&#34;)。

答案 2 :(得分:-1)

与写作相同:

public BankAccount()
{
    AccountNo = Guid.NewGuid();
    _balance = 0;
    _transactions = new List<Transaction>();
    _customerRef = "";
    _transactions.Add(new Transaction(0m, 0m, "account created", DateTime.Now));
}

public BankAccount(Guid Id, decimal balance, IList<Transaction> transactions, 
                   string customerRef)
{
    AccountNo = Id;
    _balance = balance;
    _transactions = transactions;
    _customerRef = customerRef;
}