ventajas una sirve qué que poo para interfaces hay entre ejercicios diferencia desventajas definicion clases clase abstractas abstracta c# syntax interface abstract-class

una - C#: ¿Las clases abstractas necesitan implementar interfaces?



qué diferencia hay entre clases abstractas e interfaces (3)

Mi código de prueba en C #:

namespace DSnA { public abstract class Test : IComparable { } }

Resultados en el siguiente error del compilador:

error CS0535: ''DSnA.Test'' does not implement interface member ''System.IComparable.CompareTo(object)''

Como la clase Test es una clase abstracta , ¿por qué el compilador requiere que implemente la interfaz? ¿No debería este requisito ser obligatorio para clases concretas?


A diferencia de Java, en C #: "una clase abstracta debe proporcionar implementaciones de todos los miembros de las interfaces que se enumeran en la lista de clase base de la clase. Sin embargo, una clase abstracta puede mapear métodos de interfaz en métodos abstractos".

https://msdn.microsoft.com/en-us/library/Aa664595(v=VS.71).aspx


En C #, se requiere una clase que implemente una interfaz para definir todos los miembros de esa interfaz. En el caso de una clase abstracta, simplemente define esos miembros con la palabra clave abstract :

interface IFoo { void Bar(); } abstract class Foo : IFoo { public abstract void Bar(); }

O para decirlo de otra manera: no tiene que "implementarlo" (lo cual sería una terrible limitación para las clases abstractas); sin embargo, en C #, tienes que decirle al compilador que estás pasando deliberadamente el dinero a las subclases concretas, y la línea de código anterior muestra cómo hacerlo.

Los comentarios y votos negativos quejándose de que esto no es una respuesta a la pregunta no tienen sentido. Alguien que viene a , después de haber recibido este error de compilación, pero tener una clase abstracta en la que sería un error proporcionar una implementación, está atascado sin una buena solución, tendría que escribir métodos de implementación que arrojaran excepciones de tiempo de ejecución, un trabajo horrendo -alrededor- hasta que tengan la información anterior. Si es bueno o malo que C # requiera esta explicitud está fuera del alcance de Desbordamiento de pila, y no es relevante para la pregunta ni para esta respuesta.


No tienen que implementar realmente la interfaz .
Los métodos / propiedades de la interfaz también pueden ser abstractos o incluso virtuales. Por lo tanto, depende de las subclases implementarlas realmente.