2010-08-30 51 views
22

¿De cuántas clases puedes heredar en .NET?¿De cuántas clases puedes heredar en C#?

Hay varios archivos backend C# que me gustaría compartir métodos estáticos por separado, pero todos están en diferentes clases. ¿Hay alguna manera de heredar múltiples clases?

El código de ejemplo sería muy apreciado.

+0

¿Cómo está el código que ha estructurado? ¿Estás tratando de llamar a los métodos estáticos de una sola clase o estás tratando de hacer algo diferente? Si está intentando agrupar un montón de métodos estáticos, las interfaces no lo ayudarán. –

+1

Como los métodos son estáticos (asumiendo público) puede acceder a ellos desde cualquier clase en cualquier momento, no es necesario "heredar" un objeto para poder utilizar sus métodos estáticos. –

+0

@zach Creo que la mayoría de estos caen en la categoría de métodos estáticos de utilidad que serán utilizados por varios códigos diferentes detrás de las clases. Estoy usando los métodos comunes de la misma manera que uso la clase de Matemáticas. – locoboy

Respuesta

32

C# no es compatible con herencia múltiple (lo que significa que una clase hereda de varias clases). Sin embargo, puede implementar múltiples interfaces en una sola clase.

En cuanto a encadenar juntas las clases heredadas, no hay un límite per se. Solo tenga en cuenta la complejidad que presentará a su sistema. Al usar la herencia, asegúrese de usarla en un escenario "es un". Una cheeta es un animal. Una mazda es un auto. De lo contrario, su herencia combina fuertemente sus clases con un diseño que se vuelve mucho más difícil de mantener.

Si son métodos de "utilidad" estáticos, solo inícielos directamente sin heredar. A menos que esos métodos pertenezcan a la entidad que está creando, no debe usar la herencia.

+0

@jordan la mayoría de los métodos que usaré de una de las clases son métodos de utilidad. si este es el caso, ¿cómo recomendaría que use/no use la herencia? – locoboy

+5

En este caso simplemente hazlo, StaticClassName.StaticMethodName (...) dentro de la clase que lo está usando. No necesita herencia para este escenario. Una simple llamada funcionará bien. La herencia solo debe usarse para crear nuevas clases que sean un tipo más "especializado" de la clase principal: NO para otorgar acceso a métodos fuera de la clase del cliente. –

15

Solo puede heredar de una sola clase. Sin embargo, es posible implementar múltiples interfaces.

+2

Si bien esto es correcto, no creo que haya respondido la pregunta que estaba haciendo cfarm54. –

+4

La pregunta era: ¿hay alguna forma de heredar varias clases? Aunque no ofrecí una solución, HICE la pregunta correctamente. –

7

No puede hacer herencia múltiple en C#.

Podría lograr los mismos fines utilizando interfaces si no fuera por el hecho de que desea compartir métodos estáticos.

+2

(-1) "Puede lograr los mismos fines usando interfaces". Falso. El usuario declaró explícitamente que le gustaría 'compartir métodos estáticos separados'. Las interfaces no logran el mismo fin. No apoyo la herencia múltiple, solo digo que su declaración es incorrecta. – DevinB

+0

@devinb - respuesta actualizada. – ChrisF

+0

downvote eliminado. – DevinB

3

Puede heredar en "cadena" tantas clases como desee, pero la herencia múltiple no está permitida en los lenguajes .NET.

Su única opción para la herencia múltiple en .NET son las interfaces.

9

Digamos que usted tiene Utils.cs:

internal class Utils { 
    public static void Log(string str) { 
     // log str to a file... 
    } 
} 

y hay una DB.cs que utiliza el método de registro y en el mismo espacio de nombres con clase Utilidades:

public class DB { 
    public void SaveToDB() { 
     // some db operations 
     Utils.Log("DB operation successful"); 
    } 
} 

Desde método de registro se estático, no necesita inicializar la clase Utils para usar este método.

Como conclusión, no puede usar la herencia múltiple, pero para su caso, tampoco la necesita. Puede usar métodos estáticos sin herencia múltiple.

+0

gracias esta es la respuesta que estaba buscando emparejado con @jordan – locoboy

+0

De nada ... – Zafer

2

En .NET solo puede heredar de una clase base pero implementar múltiples interfaces.

para una situación específica ASP.NET como si estuvieras en que puede hacer lo siguiente:

public class BasePage : Page 
{ 
    public string SomeMethod() { //Magic happens here } 
} 

y tienen sus formularios web heredan de BasePage de código subyacente.

Otro curso seguido a menudo es crear una clase estática personalizada que tenga todos los métodos estáticos. Asegúrese de estar trabajando con cosas específicas de ASP.NET para prefijarlas con HttpContext.Current.

Por ejemplo:

public static class HelperClass 
{ 
    public static string GetUsernameFromSession() 
    { 
     return HttpContext.Current.Session["Username"].ToString(); 
    } 
} 
3

Mientras los descriptores de acceso se establecen apropiadamente, métodos estáticos son más o menos compartidos de todos modos (de hecho, usan la palabra clave compartido en VB); no importa en qué clase se encuentren porque están desconectados de cualquier objeto instanciado.

Para llamar a un método estático, se prefacio con el nombre de la clase en la que se declara:

MyClass.MyUtilityMethod(); 

El descriptor de acceso debe haber public o puede ser internal si la persona que llama y el método están en la mismo proyecto/montaje.

Si su objetivo es simplemente para crear un único punto de acceso para los métodos estáticos, se crea una clase que reenvía las llamadas cuando sea apropiado:

public static class SharedMethods 
{ 
    public static void SharedMethod1() 
    { 
     ClassA.SharedMethod1(); 
    } 

    public static string GetName() 
    { 
     return NameProvider.GetName(); 
    } 

    public static int GetCount() 
    { 
     return CountClass.GetCount(); 
    } 
} 

esta manera se puede acceder a través de todo SharedMethods.GetName() etc.

+0

Esta técnica se llama delegación. Como Jay dice correctamente, no te compra mucho aquí. –

2

No puede heredar de varias clases. Sin embargo, puede encadenar las clases que heredan una de otra.

Empleado Clase

Class Manager: Empleado

RegionalDirector clase: Gestor

Así que si usted tiene un/identificación de empleado/contacto esquema de información de nombres entera pasando dentro de su programa, puede heredar ese del empleado. Luego, elabore con información para el gerente, y luego aún más información para el director regional.

Cuestiones relacionadas