2011-10-29 25 views
7

tengo una clase que tiene este aspecto:¿Puedo dividir mi clase C# en varios archivos?

public static class ReferenceData 
    { 

     public static IEnumerable<SelectListItem> GetAnswerType() 
     { 
      return new[] 
       { 
        new SelectListItem { Value = "1", Text = "1 answer" }, 
        new SelectListItem { Value = "2", Text = "2 answers" }, 
        new SelectListItem { Value = "3", Text = "3 answers" } 
       }; 
     } 

     public static IEnumerable<SelectListItem> GetDatastore() 
     { 
      return new[] 
       { 
        new SelectListItem { Value = "DEV", Text = "Development" }, 
        new SelectListItem { Value = "DC1", Text = "Production" } 
       }; 
     } 
     public static string GetDatastoreText(string datastoreValue) 
     { 
      return GetDatastore().Single(s => s.Value == datastoreValue).Text; 
     } 
     public static string GetDatastoreValue(string datastoreText) 
     { 
      return GetDatastore().Single(s => s.Text == datastoreText).Value; 
     } 

     // Lots more here 
     // Lots more here 

} 

Hay mucho más que no les haya mostrado anteriormente.

Actualmente, toda la información de la clase está en un archivo. Sin embargo, me gustaría dividir esto en varios archivos. ¿Hay alguna forma de que pueda difundir el contenido de la clase ReferenceData en más de un archivo?

Respuesta

19

Sí, puede utilizar partial classes. Esto le permite dividir su clase en varios archivos.

Archivo 1:

public static partial class ReferenceData 
{ 
    /* some methods */ 
} 

Archivo 2:

public static partial class ReferenceData 
{ 
    /* some more methods */ 
} 

Utilice esta función con precaución. El uso excesivo puede dificultar la lectura del código.

+0

+1. Sin embargo, considere usar regiones para organizar mejor el código dentro de un solo archivo. Si todavía 'necesita' varios archivos, generalmente es una señal de que su clase no está bien diseñada. Considere dividirlo en varias clases con trabajos/comportamientos claramente definidos. –

+1

@JasonWilliams De acuerdo, pero tenga en cuenta que hay casos en los que son necesarias clases parciales, como en asp mvc, donde la mitad de la clase se genera automáticamente, y es posible que desee agregar algo más. – Tesserex

0

Sí, por supuesto, puede utilizar palabra clave parcial antes de clase en todas las declaraciones. por ejemplo, hacer 4 clases en diferentes archivos (pero en el mismo espacio de nombres) así:

File1.css

public static partial class ReferenceData 
{ 

    public static IEnumerable<SelectListItem> GetAnswerType() 
    { 
     return new[] 
      { 
       new SelectListItem { Value = "1", Text = "1 answer" }, 
       new SelectListItem { Value = "2", Text = "2 answers" }, 
       new SelectListItem { Value = "3", Text = "3 answers" } 
      }; 
    } 

}

File2.cs

public static partial class ReferenceData 
{ 

    public static IEnumerable<SelectListItem> GetDatastore() 
    { 
     return new[] 
      { 
       new SelectListItem { Value = "DEV", Text = "Development" }, 
       new SelectListItem { Value = "DC1", Text = "Production" } 
      }; 
    } 

}

File3.cs

public static partial class ReferenceData 
{ 

    public static string GetDatastoreText(string datastoreValue) 
    { 
     return GetDatastore().Single(s => s.Value == datastoreValue).Text; 
    } 
    public static string GetDatastoreValue(string datastoreText) 
    { 
     return GetDatastore().Single(s => s.Text == datastoreText).Value; 
    } 

}

File4.cs

public static partial class ReferenceData 
{ 

    // Lots more here 
    // Lots more here 

}

Cuestiones relacionadas