El siguiente código compila en C#:¿Por qué F # no permite atributos múltiples donde C# lo hace?
[ContentType("text")]
[ContentType("projection")]
public class Class1
{
}
el código siguiente en F # no se compila:
[<ContentType("text")>]
[<ContentType("projection")>]
type Class1() = class end
El error de compilación en F # es: "El tipo de atributo 'ContentTypeAttribute' tiene 'allowMultiple = false '. No se pueden asociar varias instancias de este atributo a un solo elemento de idioma. "
Por ContentType descompilación, puedo ver que ContentType hereda de MultipleBaseMetadataAttribute que tiene 'allowMultiple = true' en el AttributeUsage.
De hecho, parece que F # no hereda el AttributeUsage de la clase principal.
[<AttributeUsage(AttributeTargets.Class, AllowMultiple = true)>]
type FooAttribute() =
inherit Attribute()
type BarAttribute() =
inherit FooAttribute()
[<Foo>]
[<Foo>]
type MyClassCompiles() = class end
donde
[<Bar>]
[<Bar>]
type MyClassDoesNotCompile() = class end
Por cierto, esto suena como un duplicado exacto de la siguiente pregunta, pero no lo es en realidad. Esto se trata de F # que honra la configuración de AllowMultiple en un atributo, y la otra pregunta es sobre la sintaxis para combinar múltiples atributos en una sola declaración. http://stackoverflow.com/questions/9620712/is-it-possible-to-combine-multiple-attributes-in-f –