Ok Derivo un tipo B
de una clase base A
. A
implementa IDisposable
explícita, pero tengo que hacer la limpieza adicional en B
, por lo que aplicar IDisposable
en B
:llame a un método de interfaz explícita de clase base en F #
interface IDisposable with
member i.Dispose() =
// ... additional work
base.Dispose() // <- want to do but cannot
pregunta es: ¿cómo acceder a la Desechar método de la base?
(base :> IDisposable).Dispose()
produce error del compilador: Unexpected symbol ':>' in expression. Expected '.' or other token.
Hacer algo como
(i :> IDisposable).Dispose()
, por supuesto, se obtiene un StackOverflowException
en tiempo de ejecución - así que ¿cómo puedo hacer esto? Lo siento, pero nunca he encontrado algo como esto antes ...
bien - Me podría haber puesto a mal - A no es uno de mis propios tipos (que es un 'DuplexClientBase') - por lo que esta no es una solución. Y sí sé que no se puede usar la base de esta manera (el compilador dice mucho) - la pregunta es ¿CÓMO llego a la base Dispose of? Por ahora, resolví esto usando un método de miembro público para limpiar y hacer que las personas que llaman limpiaran llamando a este método + eliminar, pero esto es solo un truco y se siente mal – Carsten
¿Has verificado si hay una sobrecarga sobrante de 'Dipose'? 'vacío virtual protegido Dispose (bool disposing)' es un patrón común. – Daniel
No he comprobado explícitamente pero no si MSDN tiene razón: http://msdn.microsoft.com/en-us/library/ms576169.aspx - Tengo la sensación de que no se puede hacer esto en F #, de ser así alguien puede confirmarlo ? – Carsten