Je vais vous montrer un problème par exemple. Il y a une classe de base avec interface fluide:
class FluentPerson
{
private string _FirstName = String.Empty;
private string _LastName = String.Empty;
public FluentPerson WithFirstName(string firstName)
{
_FirstName = firstName;
return this;
}
public FluentPerson WithLastName(string lastName)
{
_LastName = lastName;
return this;
}
public override string ToString()
{
return String.Format("First name: {0} last name: {1}", _FirstName, _LastName);
}
}
et un enfant de la classe:
class FluentCustomer : FluentPerson
{
private long _Id;
private string _AccountNumber = String.Empty;
public FluentCustomer WithAccountNumber(string accountNumber)
{
_AccountNumber = accountNumber;
return this;
}
public FluentCustomer WithId(long id)
{
_Id = id;
return this;
}
public override string ToString()
{
return base.ToString() + String.Format(" account number: {0} id: {1}", _AccountNumber, _Id);
}
}
Le problème est que lorsque vous appelez customer.WithAccountNumber("000").WithFirstName("John").WithLastName("Smith")
vous ne pouvez pas ajouter d' .WithId(123)
à la fin parce que le type de retour de la WithLastName()
méthode est FluentPerson (pas FluentCustomer).
Comment ce problème généralement résolu?