No estoy seguro si esto es una pregunta tonta, pero simplemente se dio cuenta de esto:¿Por qué son necesarios los nombres de parámetros en una definición de interfaz? Se me permite elegir nuevos nombres de los parámetros durante la ejecución
public interface IActivityDao : IDao<Activity>
{
IList<Activity> GetAllSinceSequence(long sequence, int count);
}
public class ActivityDao : AbstractNHibernateDao<Core.Domain.Activity>, IActivityDao
{
public IList<Activity> GetAllSinceSequence(long sequence, int maxRecords)
{
}
}
Dentro de mi aplicación que he llamado mi segundo parámetro 'maxRecords.' Sin embargo, en la interfaz, se define como 'conteo'. El compilador aún considera la interfaz implementada, lo cual es bueno, pero puede generar cierta ambigüedad. Claramente, debería cambiar el nombre de uno de los parámetros para que coincida con el otro.
Jugué un poco antes de hacer el cambio de nombre y noté algo interesante. No estoy autorizado para declarar mi interfaz como:
public interface IActivityDao : IDao<Activity>
{
IList<Activity> GetAllSinceSequence(long, int);
}
¿Es sólo el compilador ser excesivamente protector contra symantics C#? ¿Para qué sirven los nombres de los parámetros en el método de una interfaz, aparte de hacer que el código sea más legible? Me parece que invita a la ambigüedad si los nombres de los parámetros no se fuerzan en las implementaciones.
Usted merece más votos favorables. Tienes la mejor respuesta de lejos. Respondió la pregunta del OP de manera muy sucinta. – Enigmativity
Bueno, más o menos. La respuesta, aunque clara, realmente no aborda la última frase de mi publicación. ¿Por qué no hay garantía de que los parámetros se llamarán igual durante la implementación? Si la única intención es auto-documentarse y ser claro, ¿por qué no llevar esa claridad hasta las implementaciones? No quiero anunciar accidentalmente mi método como aceptar 'contar' cuando realmente espero 'maxResults'. –
Porque es posible que desee auto-documentación más específica en el nivel de implementación. Digamos que creó una interfaz IBinaryMathOperation, con un método Execute (int operand1, int operand2). Luego implementó una clase AddOperation implementando la interfaz. Los "operandos" de un método add se conocen más específicamente como "sumandos", y es posible que desee llamarlos en la implementación específica de Execute(). – KeithS