En C# aún define los métodos, pero no proporciona un cuerpo y lo marca como abstracto. De este modo:
interface IFoo
{
void Bar();
}
abstract class Foo : IFoo
{
public abstract void Bar();
}
O, para decirlo de otra manera: que no tiene que "aplicar" (lo que sería una terrible limitación de las clases abstractas); sin embargo, en C#, usted tiene que decirle al compilador que está pasando deliberadamente el dinero a las subclases de concreto, y la línea de código anterior muestra cómo hacerlo.
[Los comentarios y votos negativos que se quejan de que esta no es una respuesta a la pregunta carecen de sentido. Alguien que viene a stackoverflow, habiendo recibido este error de compilación, pero teniendo 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 stackoverflow, y no es relevante para la pregunta ni esta respuesta.]
Haha. Escribí una cosa y luego decidí cambiarla. Lo siento. :) – Joel
Basado en los votos a favor y en los comentarios sobre la respuesta aceptada, creo que los votos a favor vienen por la forma en que está formulada la pregunta. OP pregunta "¿por qué es así?", Que estaría fuera del alcance de stackoverflow. Habiéndome encontrado esto yo mismo, la pregunta es más como "¿Me estoy perdiendo algo? ¿De verdad tengo que proporcionar implementaciones? ¿Eso no le gana al punto de ser una clase abstracta?" A lo que la respuesta es "No, no tienes que proporcionar * implementaciones * (lo que violaría el propósito de una clase abstracta), pero esto es lo que tienes que hacer para que tu situación funcione". – ToolmakerSteve