Al llamar a un método, ¿debemos usar base.methodname y this.methodname?

7

En C #, con un conjunto de clases heredado: al llamar a un método, ¿debemos utilizar las palabras clave 'base.methodname y this.methodname' ... independientemente de si se trata de un método anulado o no?

Es probable que el código sufra cambios en términos de lógica y tal vez algunas condiciones similares a IF-ELSE puedan aparecer en una fecha posterior. Por lo tanto, en ese momento, el desarrollador debe ser obligado a revisar cada línea de código y asegurarse de que él / ella haga la elección correcta de qué método se está llamando --- base.methodname () o this.methodname () ELSE the. NET Framework llamará DEFAULT (creo que es base.methodname ()) y toda la lógica puede ir por un lanzamiento.

    
pregunta MukeshAnAlsoRan 07.02.2012 - 12:25

5 respuestas

25

Usar la palabra clave base no es una cuestión de preferencia, es una cuestión de corrección. Si desea llamar a la implementación de la clase base en un método invalidado, debe usar base . Si no desea llamar a eso, no puede usar base .

La palabra clave this , por otro lado, es una cuestión de preferencia en la mayoría de los casos. Creo que solo desordena innecesariamente el código, así que no lo uso si no tengo que hacerlo. Donde es útil es si tiene un parámetro de método con el mismo nombre que el campo (o propiedad). Yo usaría this en tal caso. Pero si estoy escribiendo un código nuevo, tiendo a usar convenciones de nomenclatura que evitan este problema.

    
respondido por el svick 07.02.2012 - 12:56
5

Sugeriría que si está llamando explícitamente a un método base desde una clase en la que ese método está anulado, tiene un grave problema con la lógica y la legibilidad. base realmente debería aparecer solo cuando se llama a la implementación base de un método anulado desde ese método anulado.

En todas partes, debería ser this (si el método no se anula, de todos modos irá a la clase base) y no hay nada de malo en permitir que el compilador deduzca eso.

    
respondido por el pdr 07.02.2012 - 12:46
0

palabra clave this : no hay una regla estricta y rápida para aplicar la palabra clave this , ya que es una preferencia personal, pero su código podría estar desordenado.

Ventajas y desventajas de usar esta palabra clave en C #

palabra clave base (reutilización): ya hay respuestas que indican el uso de base. Me gustaría añadir un punto.

La funcionalidad común para todas las clases derivadas vendría en la clase base y puede llamar al método base seguido por la implementación específica en el método en la clase derivada que logra la reutilización.

    
respondido por el Karthik Sreenivasan 07.02.2012 - 12:39
0

Además de lo mencionado, puede usar "esto" al llamar a una función de extensión.

public static class ExtensionForMyClass {  
public static void SomeFunction (this MyClass inst) {} 
}

No puedes hacer:

SomeFunction();

desde dentro del cuerpo de MyClass. Sólo:

this.SomeFunction();

No hay ninguna razón real para crear extensiones estáticas para la clase que está creando. El único escenario en el que me fue útil es cuando tenía funciones de extensión basadas en la interfaz que mi clase está implementando, no en la clase en sí.

    
respondido por el Iurii Selinnyi 06.11.2018 - 09:10
0

Recomendaría eliminar el prefijo this. , excepto en los casos en que agregue simetría. Por ejemplo:

public class Foo: IComparable {
    int value1, value 2;

    public int CompareTo(object _that) {
        if (_that == null) return 1;
        if (Object.ReferenceEquals(this, _that)) return 0;

        Foo that = (foo) _that;
        var result = this.value1.CompareTo(that.value1)
        if (result != 0) return result;

        result = this.value2.CompareTo(that.value2)
        if (result != 0) return result;

        return 0
    }
}
    
respondido por el Alexander 06.11.2018 - 19:16

Lea otras preguntas en las etiquetas