Poniższy kod kompiluje w C#:Dlaczego funkcja F # nie zezwala na wiele atrybutów, w których działa C#?
[ContentType("text")]
[ContentType("projection")]
public class Class1
{
}
Poniższy kod w F # nie kompiluje:
[<ContentType("text")>]
[<ContentType("projection")>]
type Class1() = class end
Błąd kompilacji w F # to: „Typ atrybutu 'ContentTypeAttribute' ma„AllowMultiple = false '. Wiele instancji tego atrybutu nie może być dołączonych do pojedynczego elementu języka. "
Przez dekompilacji contenttype, widzę, że ContentType dziedziczy MultipleBaseMetadataAttribute który ma 'AllowMultiple = true' w AttributeUsage.
W rzeczywistości wygląda na to, że F # nie dziedziczy AttributeUsage z klasy nadrzędnej.
[<AttributeUsage(AttributeTargets.Class, AllowMultiple = true)>]
type FooAttribute() =
inherit Attribute()
type BarAttribute() =
inherit FooAttribute()
[<Foo>]
[<Foo>]
type MyClassCompiles() = class end
gdzie
[<Bar>]
[<Bar>]
type MyClassDoesNotCompile() = class end
Nawiasem mówiąc, to brzmi jak dokładną kopią następującym pytaniem, ale nie jest to w rzeczywistości. Chodzi o F # honorowanie ustawienia AllowMultiple dla atrybutu, a inne pytanie dotyczy składni do łączenia wielu atrybutów w pojedynczej instrukcji. http://stackoverflow.com/questions/9620712/is-it-possible-to-combine-multiple-attributes-in-f –