2009-10-22 11 views
8

Mam interfejs o nazwie IAddress i klasę o nazwie Adres, która obsługuje ulicę, miasto, województwo, kod pocztowy i kraj. Mam kilka klas Linq2Sql, które mają wszystkie informacje o adresie i chciałbym zaimplementować interfejs IAddress, i przekazać to do konstruktora dla adresu, który spowodowałby załadowanie wartości właściwości.Czy możesz zaimplementować interfejs w klasie Linq2Sql?

Czy to możliwe, że klasa Klasy Linq2Sql i interfejs są obsługiwane przez klasę częściową, którą dla niej stworzyłem? Z góry dziękuję!

Dodatkowe komentarze

W mojej klasie mam właściwość o nazwie MailToStreet, że chcę, aby mapować do IAddress.Street. Czy jest jakiś sposób, aby to zrobić w częściowej klasie?

rozwiązać

Thanks StackOverflow społeczności! To było szybkie! Tu jest mój ostateczny kod:

public partial class Location : IAddress 
{ 
    string IAddress.Street 
    { 
     get { return this.Street; } 
     set { this.Street = value; } 
    } 

    string IAddress.City 
    { 
     get { return this.City; } 
     set { this.City = value; } 
    } 

    string IAddress.StateProvince 
    { 
     get { return this.StateProvince; } 
     set { this.StateProvince = value; } 
    } 

    string IAddress.PostalCode 
    { 
     get { return this.PostalCode; } 
     set { this.PostalCode = value; } 
    } 

    string IAddress.Country 
    { 
     get { return this.Country; } 
     set { this.Country = value; } 
    } 
} 
+0

Biorąc pod uwagę, że cały interfejs nazwy członków są takie same jak nazwy właściwości w klasie encji, to powinno wystarczyć: s ublic partial class Lokalizacja: IAddress {} –

Odpowiedz

13

klas LinqToSql są częściowymi klasy, dzięki czemu można mieć dodatkowy plik, który implementuje interfejs dla klasy LinqToSql.

Wystarczy dodać do nowego pliku, używając tej samej nazwy klasy jako klasy LinqToSql:

public partial class LinqToSqlClass : IFoo { 
    public void Foo() { 
     // implementation 
    } 
} 

Jeśli klasa LinqToSql już wdraża niezbędne proporties powinien być w stanie obejmować jedynie deklarację interfejsu.

Aby odpowiedzieć na komentarz dotyczący używania odmiennie nazwanej właściwości LinqToSQL do implementacji interfejsu, można użyć powyższej składni i po prostu wywołać właściwość LinqToSQL z właściwości interfejsu lub zachować nieco czystsze działanie, należy użyć jawnej implementacji:

public partial class LinqToSqlClass : IFoo { 
    void IFoo.Foo() { 
     return this.LinqFoo(); // assumes LinqFoo is in the linq to sql mapping 
    } 
} 

używając tej składni, klienci korzystający swoją klasę nie zobaczymy właściwość nadmiarowe używane wyłącznie do realizacji interfejsu (będzie niewidoczny, chyba że przedmiot jest odlewana do tego interfejsu)

+0

W mojej klasie mam właściwość o nazwie MailToStreet, chcę, aby mapować do IAddress.Street. Czy jest jakiś sposób, aby to zrobić w częściowej klasie? – mattruma

+2

Po prostu zapakuj swoją właściwość MailToStreet w zupełnie nowej własności Street w swojej klasie częściowej ... to wystarczy, o) –

+0

To zadziałało! Powinienem się domyślić, że to takie proste! – mattruma

Powiązane problemy