f# - poo - para que sirve una clase abstracta
En un error de compilación de accesibilidad cuando un tipo público implementa una interfaz interna en F# (1)
Como se señaló en el comentario de Patrick, este problema se registró como un error de Visual F #. Actualmente está incluido en F # 4.0 Update 3 hito.
Escribi algun codigo como
type internal IMyInterface =
abstract member Method1 : unit -> unit
type Class1() =
member this.Y() =
(this :> IMyInterface).Method1()
interface IMyInterface with
member this.Method1() = ()
Tenga en cuenta que el tipo público Class1 implementa una interfaz interna IMyInterface, se compila bien. En la MSIL generada, "Método 1" se mostró como privado. Esto es similar a las interfaces explícitas en C #.
Sin embargo, cuando cambio el código un poco para
type internal Foo() =
member x.Value = "Foo"
type internal IMyInterface =
abstract member Method1 : Foo -> unit
type Class1() =
member this.Y() =
let v = Foo()
(this :> IMyInterface).Method1(v)
interface IMyInterface with
member this.Method1(v : Foo) = ()
En este tipo, el método de interfaz "Método 1" toma un tipo interno "Foo" como parámetro. Esta vez, no se compila con un error.
The type ''Foo'' is less accessible than the value, member or type ''override Class1.Method1 : v:Foo -> unit'' it is used in
Tengo problemas para descifrar este mensaje de error y encontrar una solución para ello. En C #, puedo escribir el siguiente código que compila bien
internal class Foo
{
string Value { get; set; }
}
internal interface IMyInterface
{
void Method1(Foo v);
}
public class Class1 : IMyInterface
{
public void Y()
{
var v = new Foo();
(this as IMyInterface).Method1(v);
}
void IMyInterface.Method1(Foo v)
{
throw new NotImplementedException();
}
}
¿Alguna idea sobre el error del compilador F # y cómo solucionarlo?
Por cierto: esta puede no ser la forma / patrón correcto de usar la interfaz de todos modos, solo tengo curiosidad por la sintaxis del idioma