2009-10-22 6 views
8

J'ai une interface appelée IAddress, et une classe appelée Adresse qui gère la rue, la ville, l'état/province, le code postal et le pays. J'ai un couple de classes Linq2Sql qui a toutes les informations d'adresse et voudrait implémenter l'interface IAddress, et passer cela au constructeur pour l'adresse qui chargerait les valeurs de propriété.Pouvez-vous implémenter une interface sur une classe Linq2Sql?

Est-il possible d'avoir une implémentation et une interface de classe Linq2Sql à travers la classe partielle que j'ai créée pour elle? Merci d'avance!

commentaires supplémentaires

Dans ma classe, j'ai une propriété appelée MailToStreet, je veux que mapper à IAddress.Street. Y a-t-il un moyen de faire cela dans la classe partielle?

Résolu

Merci communauté StackOverflow! C'était un clin d'oeil! Voici mon code final:

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

Étant donné que toute l'interface Les noms des membres sont les mêmes que les noms des propriétés dans la classe d'entité, cela devrait suffire: p classe partielle ublic Lieu: IAddress {} –

Répondre

13

classes LinqToSql sont des classes partielles, de sorte que vous pouvez avoir un fichier supplémentaire qui implémente l'interface pour la classe LinqToSQL.

ajouter ceci dans un nouveau fichier, en utilisant le même nom de classe comme classe LinqToSQL:

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

Si votre classe LinqToSQL implémente déjà les proporties nécessaires, vous devriez pouvoir inclure uniquement la déclaration d'interface. Pour répondre au commentaire sur l'utilisation d'une propriété LinqToSQL différemment nommée pour implémenter l'interface, vous pouvez utiliser la syntaxe ci-dessus et appeler simplement la propriété LinqToSQL de la propriété interface, ou pour garder les choses un peu plus propres, utilisez l'implémentation explicite:

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

En utilisant cette syntaxe, les clients accédant à votre classe ne verront pas une propriété redondante utilisée uniquement pour la mise en œuvre d'une interface (il sera invisible sauf si l'objet est jeté à cette interface)

+0

Dans ma classe, j'ai une propriété appelée MailToStreet, je veux que pour mapper à IAddress.Street. Y a-t-il un moyen de faire cela dans la classe partielle? – mattruma

+2

Il suffit d'envelopper votre propriété MailToStreet dans une nouvelle propriété Street dans votre classe partielle ... il fera l'affaire; o) –

+0

Cela a fonctionné! Aurait dû penser que ce serait aussi simple! – mattruma

Questions connexes