C#
パターン3:暗黙キャストと直接キャスト(型が確定している時だけ)
出典: C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン) — パターン3:暗黙キャストと直接キャスト(型が確定している時だけ)
// ✅パターン3-a:暗黙キャスト(継承関係が静的型レベルで明確)
public class CsvLoader : IDataLoader { /* 実装 */ }
CsvLoader csvLoader = new CsvLoader();
IDataLoader loader = csvLoader; // ✅暗黙キャストOK(CsvLoader → IDataLoader)
// ❌パターン3-b:直接キャスト(失敗するとInvalidCastException)
object data = GetData();
IDataLoader bad = (IDataLoader)data; // dataがIDataLoader実装でないと例外
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「パターン3:暗黙キャストと直接キャスト(型が確定している時だけ)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅パターン1: is +パターンマッチ(C# 7以降の本命) public void Process(object data) { if (data is IDataLoader loader)
▶ 実行可
パターン1: is +パターンマッチング(C# 7以降の本命)
#159cd4da0496
// ✅パターン2: as + nullチェック(複数候補をフラットに並べる) public string Describe(object obj) { var loader = obj as IDataLoader;未収録
パターン2: as + nullチェック(複数候補を並べる時)
#303ce1480b7a
// ❌罠1:値型InterfaceでBoxing大量発生(性能劣化) public struct Point : IComparable<Point> { public int X { get; set; }未収録
ハマりポイント— BoxingとGetType()誤用
#41267d4898a1
// ❌罠2: GetType()でInterface判定はできない if (obj.GetType()== typeof(IDataLoader))// ←常にfalse { //ここには到達しない(常にfalse)未収録
ハマりポイント— BoxingとGetType()誤用
#c0d195d72647
