Estoy tratando de crear una clase en VB.NET que hereda de una clase base abstracta y también implementa una interfaz. La interfaz declara una propiedad de cadena llamada Descripción. La clase base contiene una propiedad de cadena llamada Descripción. La clase principal hereda la clase base e implementa la interfaz. La existencia de la propiedad Descripción en la clase base cumple los requisitos de interfaz. Esto funciona bien en C# pero causa problemas en VB.NET.clase VB.NET hereda una clase base e implementa un problema de interfaz (funciona en C#)
primer lugar, aquí es un ejemplo del código C# que funciona:
public interface IFoo
{
string Description { get; set; }
}
public abstract class FooBase
{
public string Description { get; set; }
}
public class MyFoo : FooBase, IFoo
{
}
Ahora aquí es la versión VB.NET que da un error del compilador:
Public Interface IFoo
Property Description() As String
End Interface
Public MustInherit Class FooBase
Private _Description As String
Public Property Description() As String
Get
Return _Description
End Get
Set(ByVal value As String)
_Description = value
End Set
End Property
End Class
Public Class MyFoo
Inherits FooBase
Implements IFoo
End Class
Si hago la base clase (FooBase
) implementar la interfaz y añadir la Implements IFoo.Description
a la propiedad todo es bueno, pero no quiero que la clase base para implementar la interfaz.
El error del compilador es:
Class 'MyFoo' must implement 'Property Description() As String' for interface 'IFoo'. Implementing property must have matching 'ReadOnly' or 'WriteOnly' specifiers.
Puede VB.NET no manejar esto, o tengo que cambiar mi sintaxis de un lugar para conseguir que esto funcione?
que el código C# no puede compilar porque no implementa la Descripción de la clase abstracta. ¿Estás seguro de que realmente quieres tener una interfaz Y una base abstracta? –
@gbogumil - La versión C# _describe_la compilación - la implementación de la interfaz está en la clase base. –
Las respuestas a continuación responden a su pregunta - Personalmente creo que esta es una de las cosas más molestas cuando intento escribir código limpio en VB.net ... – Paddy