コードインスペクション:キャスト式は明示的な変数型に置換できます
C# の C スタイルのキャスト式は、静的アップキャストと動的ダウンキャストの両方にすることができ、どちらも同じ構文を持ちます。 型階層を念頭に置いておかないと、キャストが安全なアップキャストかランタイムダウンキャストかを判断する方法がありません。 さらに、静的アップキャストは、リファクタリング中に誤って動的ダウンキャストに変わる可能性があります。 これらの問題を回避し、コードの脆弱性を軽減するために、このインスペクションでは、可能な場合はキャストの代わりに明示的な型を使用することを提案しています。
interface IBase;
interface IDerived : IBase;
class Derived : IDerived;
class Sample
{
public Sample()
{
var derivedInstance = new Derived();
// upcast:
var baseReference = (IBase) derivedInstance;
// downcast:
var derivedReference = (IDerived) baseReference;
}
}
interface IBase;
interface IDerived : IBase;
class Derived : IDerived;
class Sample
{
public Sample()
{
var derivedInstance = new Derived();
// implicit upcast:
IBase baseReference = derivedInstance;
// downcast:
var derivedReference = (IDerived) baseReference;
}
}
derivedInstance 変数の型が変更され、 IBase と互換性がなくなると、 baseReference のこのような初期化はコンパイルされません。
2026 年 6 月 12 日