interface parentInterface { public String methodA(/*define parameters name and dataType*/); }y
public class childA : parentInterface { public String methodA(String a, int b, String c, long d){} } public class childB : parentInterface { public String methodA(int e, String f, String g){} }Quiero definir el nombre de los parámetros del método de interfaz y el tipo de datos
Crear un nuevo parámetro
Esto a menudo se puede resolver usando una class o struct para usar como parámetro único en lugar de los tipos integrados.
La interfaz
Usted sabe qué esperar de una class cuando implementa una interface familiar. Sabemos que todas las clases que implementan la interfaz IEnumerable se pueden usar en un bucle foreach . Por convención, el nombre de la interfaz es "I" seguido de una descripción de una habilidad. Es típico que el nombre termine con el sufijo "-able".
-able Sufijo formador de adjetivos que significa:
1 -capaz de ser [como en] calculable.
2 -tener la cualidad de [como en] cómodo.
Diccionario de ingles Oxford
Cambiemos el nombre de parentInterface y MethodA() para dar un ejemplo claro de cómo funciona esto normalmente (y para evitar sanciones negativas):
public interface ITreatable { Treatment GetTreatment(); } Bueno, encontrar la cura puede no ser tan fácil, incluso si el object representa una enfermedad tratable. He aquí algunos ejemplos:
public class TheFlu : ITreatable { public Treatment GetTreatment(int year) { // return some object, Treatment, based on the flu season. } } public class Hangover : ITreatable { public Treatment GetTreatment() { return Treatment.Empty; // no parameters necessary. } } public class Insomnia : ITreatable { public Treatment GetTreatment(FamilyHistory occurances, LabResult lab) { // return Some Treatment object that can be different based on the // calculated risk from the arguments. } }Lo que realmente nos falta aquí
No sé biología, pero el concepto sigue siendo el mismo. Tiene un grupo de objetos de enfermedad ITreatable que necesitan tener un método GetTreatment() ; sin embargo, utilizan diferentes criterios para realizar los cálculos. Necesitamos Symptoms .
public class Symptoms { public FamilyHistory History; public DateTime Time; public LabResult Lab; public BloodTest BloodTest; public TimeSpan SymptomTime; public IsCritical IsCritical; }Ahora, los objetos pueden analizar los síntomas en su propio método, y nuestra interfaz se verá así:
public interface ITreatable { Treatment GetTreatment(Symptoms symptoms); }Tienes dos métodos diferentes.
public String methodA(String a, int b, String c, long d){}y
public String methodA(int e, String f, String g){} que representan dos contratos diferentes para childA y childB respectivamente. No puede definir una interfaz con un solo methodA que se ajuste a ambas definiciones. Lo que buscas hacer no es posible.
Tenga en cuenta que podría definir ambas sobrecargas en su interfaz, pero luego cada clase que implemente esa interfaz tendría que implementar ambas sobrecargas.
Podría usar un método de interfaz con un número variable de argumentos usando la palabra clave params . Pero luego debe convertir cada argumento en el tipo apropiado, que es un poco propenso a errores.
public interface IFoo { void DoWork(params object [] arguments); } public class Foo : IFoo { public void DoWork(params object [] arguments) { string a = (string)arguments[0]; int b = (int)arguments[1]; string c = (string)arguments[2]; long d = (long)arguments[3]; Console.WriteLine("a={0}, b={1}, c={2}, d={3}", a,b,c,d); } } public class AnotherFoo : IFoo { public void DoWork(params object [] arguments) { int e = (int)arguments[0]; string f = (string)arguments[1]; string g = (string)arguments[2]; Console.WriteLine("e={0}, f={1}, g={2}", e,f,g); } } void Main() { var foo = new Foo(); foo.DoWork("a",1, "c",2L); var foo1 = new AnotherFoo(); foo1.DoWork(1,"f", "g"); }