次のコードはC#でコンパイルされます。
[ContentType("text")]
[ContentType("projection")]
public class Class1
{
}
F#の次のコードはコンパイルされません。
[<ContentType("text")>]
[<ContentType("projection")>]
type Class1() = class end
F#のコンパイルエラーは次のとおりです。「属性タイプ'ContentTypeAttribute'には'AllowMultiple=false'があります。この属性の複数のインスタンスを単一の言語要素にアタッチすることはできません。」
ContentTypeを逆コンパイルすると、ContentTypeがAttributeUsageに「AllowMultiple=true」を持つMultipleBaseMetadataAttributeを継承していることがわかります。
実際、F#は親クラスからAttributeUsageを継承していないようです。
[<AttributeUsage(AttributeTargets.Class, AllowMultiple = true)>]
type FooAttribute() =
inherit Attribute()
type BarAttribute() =
inherit FooAttribute()
[<Foo>]
[<Foo>]
type MyClassCompiles() = class end
どこ
[<Bar>]
[<Bar>]
type MyClassDoesNotCompile() = class end