2010-09-01 10 views
6

Sto utilizzando il framework di entità con un servizio Web e ho oggetti di classe parziale entità che sono stati generati automaticamente dal servizio web.Come creare un gruppo di metodi/proprietà all'interno di una classe?

Vorrei estendere queste classi, ma vorrei raggrupparle nella classe generata in un modo simile al modo in cui uno spazio dei nomi (tranne all'interno di una classe).

Qui è la mia classe generata:

public partial class Employee : Entity 
{ 
    public int ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

E voglio aggiungere alcune nuove proprietà, funzioni, etc simili a:

public partial class Employee : Entity 
{ 
    public string FullName { 
     get { return this.FirstName + " " + this.LastName; } 
    } 
} 

Tuttavia, vorrei raggruppare eventuali proprietà aggiuntive quindi ho una separazione un po 'più visibile dai metodi generati. Vorrei poter chiamare qualcosa come:

myEmployee.CustomMethods.FullName 

ho potuto creare un'altra classe all'interno della classe parziale chiamati CustomMethods e passare un riferimento alla classe base in modo posso accedere alle proprietà generati. O forse basta chiamarli in un modo particolare. Ma non sono sicuro di quale sia la soluzione migliore. Sto cercando idee per la comunità che siano pulite e che rientrino nelle buone pratiche. Grazie.

+0

Btw, perché vuoi per raggruppare quelle proprietà personalizzate? a volte puoi usare Attributi per contrassegnarli. –

risposta

16

Ecco un'altra soluzione che utilizza interfacce esplicite:

public interface ICustomMethods { 
    string FullName {get;} 
} 

public partial class Employee: Entity, ICustomMethods { 
    public ICustomMethods CustomMethods { 
     get {return (ICustomMethods)this;} 
    } 
    //explicitly implemented 
    string ICustomMethods.FullName { 
     get { return this.FirstName + " " + this.LastName; } 
    } 
} 

Usage:

string fullName; 
fullName = employee.FullName; //Compiler error  
fullName = employee.CustomMethods.FullName; //OK 
+2

+1 utilizzando interfacce esplicite rende il codice più leggibile con una buona estensibilità. –

+0

+1 per le interfacce esplicite –

+0

è possibile forzare l'interfaccia in modo che sia esplicita? – hunter

2
public class CustomMethods 
{ 
    Employee _employee; 
    public CustomMethods(Employee employee) 
    { 
     _employee = employee; 
    } 

    public string FullName 
    { 
     get 
     { 
      return string.Format("{0} {1}", 
       _employee.FirstName, _employee.LastName); 
     } 
    } 
} 

public partial class Employee : Entity 
{ 
    CustomMethods _customMethods; 
    public CustomMethods CustomMethods 
    { 
     get 
     { 
      if (_customMethods == null) 
       _customMethods = new CustomMethods(this); 
      return _customMethods; 
     } 
    } 
} 

tipicamente metterei Case simili a FullName proprio sulla classe parziale ma posso capire perché si potrebbe desiderare di separazione.

+0

Penso che sia quello che stavi dicendo verso la fine della tua domanda. Immagino che questa risposta non sia terribile e ottenga la separazione che stai cercando. – hunter

Problemi correlati