vida - ¿De cuántas clases puedes heredar en C#?
tramite de herencia en vida (8)
¿De cuántas clases puedes heredar en .NET ?
Hay varios archivos C # backend que me gustaría compartir métodos estáticos separados, pero todos están en clases diferentes. ¿Hay una manera de heredar múltiples clases?
Código de ejemplo sería muy apreciado.
C # no admite la herencia múltiple (lo que significa que una clase única hereda de varias clases). Sin embargo, puede implementar múltiples interfaces en una sola clase.
En cuanto a encadenar clases heredadas, no hay un límite per se. Solo tenga en cuenta la complejidad que introducirá en su sistema. Cuando utilice la herencia, asegúrese de que la está utilizando en un escenario "es un". Un cheeta es un animal. Una mazda es un coche. De lo contrario, su herencia combina estrechamente sus clases con un diseño que se vuelve mucho más difícil de mantener.
Si son métodos estáticos de "utilidad", simplemente invocarlos directamente sin heredarlos. A menos que esos métodos pertenezcan a la entidad que está creando, no debe usar la herencia.
Digamos que tienes Utils.cs:
internal class Utils {
public static void Log(string str) {
// log str to a file...
}
}
y hay un DB.cs que usa el método de registro y en el mismo espacio de nombres con la clase Utils:
public class DB {
public void SaveToDB() {
// some db operations
Utils.Log("DB operation successful");
}
}
Como el método de registro es estático, no necesita inicializar la clase Utils para usar este método.
Como conclusión, no puede utilizar la herencia múltiple, pero para su caso, tampoco necesita eso. Puede utilizar métodos estáticos sin herencia múltiple.
En .NET, solo puede heredar de una clase base pero implementar varias interfaces.
Para una situación específica de ASP.NET en la que estás, puedes hacer lo siguiente:
public class BasePage : Page
{
public string SomeMethod() { //Magic happens here }
}
y haga que sus formularios web se hereden de BasePage en código.
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();
}
}
No puedes hacer herencia múltiple en C #.
Podría lograr los mismos fines utilizando interfaces si no fuera por el hecho de que le gustaría compartir métodos estáticos.
No se puede heredar de varias clases. Sin embargo, puede encadenar clases que se heredan unas de otras.
Empleado de clase
Gerente de la clase: empleado
clase RegionalDirector: Gerente
Por lo tanto, si tiene un esquema completo de nomenclatura / ID de empleado / información de contacto dentro de su programa, puede heredarlo de un empleado. Luego, elabore con información para el gerente y luego con más información para el director regional.
Puede heredar en "cadena" tantas clases como desee, pero no se permite la herencia múltiple en lenguajes .NET.
Su única opción para la herencia múltiple en .NET son las interfaces.
Siempre que los accesores se configuren de manera adecuada, los métodos estáticos se comparten más o menos de todos modos (de hecho, utilizan la palabra clave Shared en VB); no importa cuál sea la clase en la que se encuentran porque están desconectados de cualquier objeto instanciado.
Para llamar a un método estático, prólogo con el nombre de la clase en la que se declara:
MyClass.MyUtilityMethod();
El elemento de acceso debe ser public
o puede ser internal
si la persona que llama y el método están en el mismo proyecto / ensamblaje.
Si su objetivo es simplemente crear un único punto de acceso para los métodos estáticos, cree una clase que reenvíe las llamadas según corresponda:
public static class SharedMethods
{
public static void SharedMethod1()
{
ClassA.SharedMethod1();
}
public static string GetName()
{
return NameProvider.GetName();
}
public static int GetCount()
{
return CountClass.GetCount();
}
}
De esta manera puede acceder a todo a través de SharedMethods.GetName()
etc.
Solo se puede heredar de una sola clase. Sin embargo, es posible implementar múltiples interfaces.