SORU
17 ŞUBAT 2010, ÇARŞAMBA


Akıcı arabirimleri ve kalıtım C#

Örnek bir sorun göstereceğim. Akıcı arayüzü ile temel sınıf vardır:

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);
    }
}

ve alt sınıf:

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);
    }
}

Sorun customer.WithAccountNumber("000").WithFirstName("John").WithLastName("Smith") çağırdığınızda WithLastName() yöntemin dönüş türü FluentPerson (FluentCustomer değil) çünkü sonunda .WithId(123) ekleyebilirsiniz.

Genellikle bu sorunu nasıl çözüldü?

CEVAP
17 ŞUBAT 2010, ÇARŞAMBA


Jenerik bunu elde etmek için kullanabilirsiniz.

public class FluentPerson<T>
    where T : FluentPerson<T>
{
    public T WithFirstName(string firstName)
    {
        // ...
        return (T)this;
    }

    public T WithLastName(string lastName)
    {
        // ...
        return (T)this;
    }
}

public class FluentCustomer : FluentPerson<FluentCustomer>
{
    public FluentCustomer WithAccountNumber(string accountNumber)
    {
        // ...
        return this;
    }
}

Ve şimdi:

var customer = new FluentCustomer()
  .WithAccountNumber("123")
  .WithFirstName("Abc")
  .WithLastName("Def")
  .ToString();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FailArmy U

    FailArmy U

    29 AĞUSTOS 2009
  • skiesofblack.net

    skiesofblack

    14 HAZİRAN 2009
  • RaverX DouBle StAg XI

    RaverX DouBl

    23 Mayıs 2008