2011-10-29 13 views
7

Ho una classe che assomiglia a questo:Posso dividere la mia classe C# su più file?

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 

} 

C'è molto di più che non ha mostrato sopra.

Attualmente tutte le informazioni sulla classe si trovano in un unico file. Tuttavia mi piacerebbe dividerlo in più file. C'è un modo in cui posso diffondere il contenuto della classe ReferenceData su più di un file?

risposta

19

Sì, è possibile utilizzare partial classes. Questo ti permette di dividere la tua classe su più file.

File 1:

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

File 2:

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

Utilizzare questa funzione con attenzione. L'uso eccessivo può rendere difficile la lettura del codice.

+0

+1. Tuttavia, è consigliabile utilizzare le regioni per organizzare meglio il codice all'interno di un singolo file. Se hai ancora bisogno di diversi file, di solito è un segno che la tua classe non è ben progettata. Considerare la possibilità di suddividerlo in più classi con lavori/comportamenti chiaramente definiti. –

+1

@JasonWilliams È d'accordo, ma tieni presente che ci sono casi in cui sono necessarie classi parziali, come ad esempio in asp mvc dove metà della classe è generata automaticamente e potresti volerlo aggiungere. – Tesserex

0

Sì, è possibile, ovviamente, utilizzare solo una parola chiave parziale prima della parola chiave della classe a tutte le dichiarazioni. per esempio fare 4 classi in file diversi (ma in stesso spazio dei nomi) in questo modo:

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 

}

Problemi correlati