Compilerfout CS1614
"name" is ambigu tussen "name" en "nameAttribute"; gebruik '@name' of 'nameAttribute'.
De compiler heeft een dubbelzinnige kenmerkspecificatie aangetroffen.
Voor het gemak kunt u met de C#-compiler ExampleAttribute opgeven als alleen[Example]
. Dubbelzinnigheid ontstaat echter als er een kenmerkklasse met de naam ExampleAttribute bestaat, omdat de compiler niet kan zien of [Example]
deze verwijst naar het Example
kenmerk of het kenmerk ExampleAttribute.Example
Gebruik dit voor het Example
kenmerk en [ExampleAttribute]
voor ExampleAttribute om te verduidelijken[@Example]
.
In het volgende voorbeeld wordt CS1614 gegenereerd:
// CS1614.cs
using System;
// Both of the following classes are valid attributes with valid
// names (MySpecial and MySpecialAttribute). However, because the lookup
// rules for attributes involves auto-appending the 'Attribute' suffix
// to the identifier, these two attributes become ambiguous; that is,
// if you specify MySpecial, the compiler can't tell if you want
// MySpecial or MySpecialAttribute.
public class MySpecial : Attribute {
public MySpecial() {}
}
public class MySpecialAttribute : Attribute {
public MySpecialAttribute() {}
}
class MakeAWarning {
[MySpecial()] // CS1614
// Ambiguous: MySpecial or MySpecialAttribute?
public static void Main() {
}
[@MySpecial()] // This isn't ambiguous, it binds to the first attribute above.
public static void NoWarning() {
}
[MySpecialAttribute()] // This isn't ambiguous, it binds to the second attribute above.
public static void NoWarning2() {
}
[@MySpecialAttribute()] // This is also legal.
public static void NoWarning3() {
}
}