Non sono sicuro se questa è una domanda stupida, ma ho appena notato questo:Perché i nomi dei parametri sono necessari in una definizione di interfaccia? Mi è permesso di scegliere nuovi nomi dei parametri durante l'implementazione
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)
{
}
}
All'interno della mia implementazione che ho chiamato il mio secondo parametro 'MaxRecords.' Tuttavia, nell'interfaccia, è definito come 'conteggio'. Il compilatore considera ancora l'interfaccia implementata, che è buona, ma può portare a un po 'di ambiguità. Chiaramente, dovrei rinominare uno dei parametri in modo che corrisponda all'altro.
Ho giocato un po 'prima di fare il cambio di nome e ho notato qualcosa di interessante. Non mi è permesso di dichiarare la mia interfaccia come:
public interface IActivityDao : IDao<Activity>
{
IList<Activity> GetAllSinceSequence(long, int);
}
E 'solo il compilatore essere eccessivamente protettivo nei confronti C# symantics? Quale scopo servono i nomi dei parametri nel metodo di un'interfaccia oltre a rendere il codice più leggibile? Mi sembra che inviti ad ambiguità se i nomi dei parametri non sono forzati sulle implementazioni.
Ti meriti più voti. Hai la risposta migliore di gran lunga. Hai risposto in modo abbastanza sintetico alla domanda dell'OP. – Enigmativity
Beh, una specie di. La risposta, benché chiara, in realtà non affronta l'ultima frase del mio post. Perché non vi è alcuna garanzia che i parametri vengano nominati uguali durante l'implementazione? Se l'unica intenzione è autodocumentare ed essere chiari - perché non portare tale chiarezza fino alle implementazioni? Non voglio pubblicizzare accidentalmente il mio metodo come se accettassi "count" quando mi aspetto veramente "maxResults". –
Perché potresti desiderare una documentazione più specifica a livello di implementazione. Supponiamo che tu abbia creato un'interfaccia IBinaryMathOperation, con un metodo Execute (int operand1, int operand2). Quindi hai implementato una classe AddOperation implementando l'interfaccia. Gli "operandi" a un metodo add sono più specificamente noti come "addendi" e potresti chiamarli nella specifica implementazione di Execute(). – KeithS