Todavía tengo problemas para entender para qué son buenas las interfaces. Leí algunos tutoriales y todavía no sé qué son realmente para otros, "hacen que sus clases cumplan sus promesas" y "ayudan con la herencia múltiple".Comprensión de las interfaces
Eso es todo. Todavía no sé cuándo utilizaría una interfaz en un ejemplo de trabajo real o incluso cuándo identificar cuándo usarlo.
Según mi conocimiento limitado de las interfaces, pueden ayudarme porque si algo lo implementa, puede pasar la interfaz permitiendo pasar como diferentes clases sin preocuparse de que no sea el parámetro correcto.
Pero nunca sé cuál es el verdadero objetivo de esto, ya que por lo general se detienen en este momento para mostrar lo que haría el código después de pasar la interfaz y si lo hacen parece que no hacen nada útil que podría mirar e ir "wow me ayudarían en un ejemplo del mundo real".
Así que lo que supongo que estoy diciendo es que estoy tratando de encontrar un ejemplo del mundo real donde pueda ver las interfaces en acción.
también no entienden que se puede hacer como una referencia a un objeto como éste:
ICalculator myInterface = new JustSomeClass();
Así que ahora si me gustaría ir MyInterface punto y intelisense iba a tirar yo sólo iba a ver los métodos de interfaz y no los otros métodos en JustSomeClass. Así que no veo un punto para esto todavía.
También comencé a hacer pruebas unitarias donde parece que les encanta usar interfaces pero todavía no entiendo por qué.
Como por ejemplo este ejemplo:
public AuthenticationController(IFormsAuthentication formsAuth)
{
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
}
public class FormsAuthenticationWrapper : IFormsAuthentication
{
public void SetAuthCookie(string userName, bool createPersistentCookie)
{
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
}
public IFormsAuthentication FormsAuth
{
get;
set;
}
Como por qué molestarse en hacer esta interfaz? ¿Por qué no simplemente hacer FormsAuthenticationWrapper con los métodos y llamarlo un día? ¿Por qué primero hacer una interfaz luego hacer que Wrapper implemente la interfaz y finalmente escribir los métodos?
Entonces no entiendo lo que dice la afirmación en realidad.
Al igual que ahora sé que la declaración está diciendo esto
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
si FormsAuth es nulo luego hacer una nueva FormsAuthenticationWrapper y asignarlo a la propiedad que es una interfaz.
Supongo que se remonta al punto completo de por qué la cosa de referencia. Especialmente en este caso ya que todos los métodos son exactamente iguales. The Wrapper no tiene ningún método nuevo que la interfaz no tenga y no estoy seguro, pero cuando haces esto, los métodos se llenan correctamente (es decir, tienen un cuerpo) y no se convierten en stubs porque eso realmente parece inútil. para mí (se convertiría a una interfaz).
A continuación, en el archivo de prueba que tienen:
var formsAuthenticationMock = new Mock<AuthenticationController.IFormsAuthentication>();
Así que sólo pase en el FormsAuthentication lo que estoy adivinando hace que todos los recibos falsos. Supongo que la clase contenedora se usa cuando el programa se está ejecutando, ya que tiene métodos reales que hacen algo (como firmar a una persona).
Pero al mirar el nuevo Mock (desde moq) acepta una clase o una interfaz. ¿Por qué no simplemente hizo que la clase contenedora pusiera esos métodos y luego en la nueva llamada falsa?
¿Eso no solo haría los talones para usted?
Por favor, vea algunas preguntas ya respondidas: http://stackoverflow.com/questions/240152/why-would-i-want-to-use-interfaces http://stackoverflow.com/questions/444245/how-will -i-know-when-to-create-an-interface http://stackoverflow.com/questions/122883/interfaces-why-cant-i-seem-to-grasp-them – heavyd
La pregunta es demasiado larga. .. –
Estaba a punto de hacer esta pregunta también :) Thxs chobo2 – balexandre