Il seguente codice viene compilato in C#:Perché F # non consente più attributi in cui C# fa?
[ContentType("text")]
[ContentType("projection")]
public class Class1
{
}
Il seguente codice in F # non compila:
[<ContentType("text")>]
[<ContentType("projection")>]
type Class1() = class end
L'errore di compilazione in F # è: "Il tipo di attributo 'ContentTypeAttribute' ha 'AllowMultiple = false'. più istanze di questo attributo non possono essere collegati a un singolo elemento del linguaggio ".
da decompilazione ContentType, posso vedere che ContentType eredita da MultipleBaseMetadataAttribute che ha 'AllowMultiple = true' nel AttributeUsage.
In realtà, sembra che F # non eredita l'AttributeUsage dalla classe genitore.
[<AttributeUsage(AttributeTargets.Class, AllowMultiple = true)>]
type FooAttribute() =
inherit Attribute()
type BarAttribute() =
inherit FooAttribute()
[<Foo>]
[<Foo>]
type MyClassCompiles() = class end
dove
[<Bar>]
[<Bar>]
type MyClassDoesNotCompile() = class end
Per inciso, questo suona come un duplicato esatto alla seguente domanda, ma in realtà non è. Si tratta di F # onorare l'impostazione AllowMultiple su un attributo, e l'altra domanda è sulla sintassi per combinare più attributi in una singola istruzione. http://stackoverflow.com/questions/9620712/is-it-possible-to-combine-multiple-attributes-in-f –