私は、次のC#コードに出くわした:クラスは言葉Attribute
を前置しなければならないと言う私たちはSonarLintを使用し、1 of it's rules属性クラス名に「属性」を追加していますか?
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class Marker : Attribute
{
}
。
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class MarkerAttribute : Attribute
{
}
私はMarkerAttribute
に破壊変更を名前Marker
を変更している不思議でしたか?属性を使用する場合は、Attribute
の部分をスキップすることが許可されているためです。一方、コード内で属性を使用する場合は、名前を変更するよりも名前全体が必要になります。
これが大きな変更と見なされる場合、これに対処する最も良い方法は何ですか?使用時に
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class MarkerAttribute : Attribute { }
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class Marker : MarkerAttribute { }
は、以下のコンパイルエラーになります:このため
CS1614「マーカー」が「マーカー」と「MarkerAttribute」の間の曖昧です。 '@ Marker'または 'MarkerAttribute'のいずれかを使用します。
APIの観点から言うと、もちろん、すべてのクラスの名前を変更するように変更されています。したがって、すべての依存するアセンブリも再コンパイルする必要があります。 – HimBromBeere