2010-09-01 6 views
6

Estoy utilizando el marco de entidad con un servicio web y tengo objetos de clase parcial de entidad que fueron generados automáticamente por el servicio web.¿Cómo crear un grupo de métodos/propiedades dentro de una clase?

Me gustaría extender estas clases, pero me gustaría agruparlos en la clase generada de una manera similar a la forma en que lo haría un espacio de nombres (excepto dentro de una clase).

Aquí es mi clase generada:

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

Y quiero añadir algunas propiedades nuevas, funciones, etc similares a:

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

Sin embargo, me gustaría agrupar las propiedades adicionales en conjunto entonces tengo una separación un poco más visible de los métodos generados. Me gustaría ser capaz de llamar a algo como:

myEmployee.CustomMethods.FullName 

que podría crear otra clase dentro de la clase parcial llamados CustomMethods y pasar una referencia a la clase base para que pueda acceder a las propiedades generadas. O tal vez solo nombrarlos de una manera particular. Pero no estoy seguro de cuál es la mejor solución. Estoy buscando ideas comunitarias que sean limpias y que se encuentren dentro de las buenas prácticas. Gracias.

+0

Por cierto, ¿por qué quiere agrupar esas propiedades personalizadas? a veces puedes usar Atributos para marcarlos. –

Respuesta

16

Aquí hay otra solución utilizando interfaces explícitas:

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

Uso:

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

+1 usando interfaces explícitas hace que el código sea más legible con buena extensibilidad. –

+0

+1 para las interfaces explícitas –

+0

¿es posible forzar que la interfaz sea explícita? – 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; 
     } 
    } 
} 

normalmente pondría propiedades como FullName a la derecha en la clase parcial pero puedo ver por qué es posible que desee separación.

+0

Creo que eso es lo que dices al final de tu pregunta. Supongo que esta respuesta no es terrible y obtiene la separación que estás buscando. – hunter

Cuestiones relacionadas