Programming w/ C# ~ 鬼滅の刃コラボ 無限列車編

鬼滅の刃 無限列車編

C#er は、鬼滅の刃 無限列車編 をこう見る。(下記コード部分にはネタバレを含みます。)
NotImplemented はきちんと実装しないと使えませんよ。

using System;
using System.Collections.Generic;
using System.Linq;
using ヒノカミ神楽 = 日の呼吸;

public interface 日の呼吸 {
  public    object? 壱ノ型_円舞()            => throw new NotImplementedException();
  public    object? 弐ノ型_碧羅の天()        => throw new NotImplementedException();
  public    object? 参ノ型_烈日紅鏡()        => throw new NotImplementedException();
  public    object? 肆ノ型_灼骨炎陽()        => throw new NotImplementedException();
  public    object? 伍ノ型_陽華突()          => throw new NotImplementedException();
  public    object? 陸ノ型_日暈の龍_頭舞い() => throw new NotImplementedException();
  public    object? 漆ノ型_斜陽転身()        => throw new NotImplementedException();
  public    object? 㭭ノ型_飛輪陽炎()        => throw new NotImplementedException();
  public    object? 玖ノ型_輝輝恩光()        => throw new NotImplementedException();
  public    object? 拾ノ型_火車()            => throw new NotImplementedException();
  public    object? 拾壱ノ型_幻日虹()        => throw new NotImplementedException();
  public    object? 拾弐ノ型_炎舞()          => throw new NotImplementedException();
  protected object? 拾参ノ型()               => throw new NotImplementedException(); // 後ほど public に修正します
  public    void    回復の呼吸()             { /* ... */ }
  public    void    全集中の呼吸()           { /* ... */ }
  public    void    全集中_常中()            { /* ... */ }
}

public interface 炎の呼吸 : 日の呼吸 { // すべての呼吸は始まりの呼吸の派生 ... のはずなのだが、基底インターフェースのメソッドを実装してないね
  public object? 壱ノ型_不知火()       { /* ... */ } // 無限列車内・対 上弦の参 猗窩座戦で利用
  public object? 弐ノ型_昇り炎天()     { /* ... */ } // 炭治郎防護に利用
  public object? 参ノ型_気炎万象()     { /* ... */ } // 映画/劇場版小説オリジナル
  public object? 肆ノ型_盛炎のうねり() { /* ... */ } // 破壊殺・空式に対応
  public object? 伍ノ型_炎虎()         { /* ... */ } // 破壊殺・乱式に対応
  // 陸・漆・捌ノ型は Obsolete ではないよね ... ?
  public object? 玖ノ型_奥義_煉獄()    { /* ... */ } // 破壊殺・滅式に対応
}

public interface 水の呼吸 : 日の呼吸 {
  public object? 壱ノ型_水面斬り()    { /* ... */ }
  public object? 弐ノ型_水車()        { /* ... */ }
  public object? 参ノ型_流流舞い()    { /* ... */ }
  public object? 肆ノ型_打ち潮()      { /* ... */ }
  public object? 伍ノ型_干天の慈雨()  { /* ... */ }
  public object? 陸ノ型_ねじれ渦()    { /* ... */ }
  public object? 漆ノ型_雫波紋突き()  { /* ... */ }
  public object? 捌ノ型_滝壷()        { /* ... */ }
  public object? 玖ノ型_水流飛沫_乱() { /* ... */ }
  public object? 拾ノ型_生生流転()    { /* ... */ }
  public object? 拾壱ノ型_凪()        => throw new NotImplementedException(); // 義勇さんだけが実装してるよ
}

public interface 雷の呼吸 : 日の呼吸 {
  public object? 壱ノ型_霹靂一閃() { /* ... */ }
  public object? 弐ノ型_稲魂()     { /* ... */ }
  public object? 参ノ型_聚蚊成雷() { /* ... */ }
  public object? 肆ノ型_遠雷()     { /* ... */ }
  public object? 伍ノ型_熱界雷()   { /* ... */ }
  public object? 陸ノ型_電轟雷轟() { /* ... */ }
  public object? 漆ノ型_火雷神()   => throw new NotImplementedException(); // 善逸だけが実装することになるよ
}

public interface 獣の呼吸 : 日の呼吸 { // 風の呼吸に似ているが、派生ではない
  public object? 壱ノ牙_穿ち抜き()      { /* ... */ }
  public object? 弐ノ牙_切り裂き()      { /* ... */ }
  public object? 参ノ牙_喰い裂き()      { /* ... */ }
  public object? 肆ノ牙_切細裂き()      { /* ... */ }
  public object? 伍ノ牙_狂い裂き()      { /* ... */ }
  public object? 陸ノ牙_乱杭咬み()      { /* ... */ }
  public void    漆ノ型_空間識覚()      { /* ... */ }
  public void    捌ノ型_爆裂猛進()      ;
  public object? 玖ノ牙_伸_うねり裂き() ;
  public object? 拾ノ牙_円転旋牙()      ;
}

public interface 血鬼術 {
  public void 再生() { /* ... */ }
}

public interface 爆血 : 血鬼術 {
  public object? 爆血() { /* ... */ }
}

public interface 瑠火の言葉 {
  public void 強く生まれた者の責務を果たす() { /* ... */ } // ここにいる者は誰も死なせない
  public void あとを託す()                   { /* ... */ } // 竈門少年, 猪頭少年, 黄色い少年 ...
}

public interface 柱 {
  public void 後輩の盾となる() { /* ... */ } // 柱ならば後輩の盾となるのは当然だ 柱ならば誰であっても同じことをする 若い芽は摘ませない
}

public class 煉獄杏寿郎 : 炎の呼吸, 柱, 瑠火の言葉 { // 基本に忠実で独自実装がない ... 至高の領域に近い?
}

public class 竈門炭治郎 : ヒノカミ神楽, 水の呼吸 { // 無限列車編 : ヒノカミ神楽のメソッドはまだ 2 つしか実装していないよ
  public    object? 壱ノ型_円舞()            { /* ... */ } // 那田蜘蛛山 対 下弦の伍 累戦で利用
  public    object? 弐ノ型_碧羅の天()        { /* ... */ } // 対 下弦の壱 魘夢戦で利用
  public    object? 参ノ型_烈日紅鏡()        => null; // 実装中 (until 遊郭編)
  public    object? 肆ノ型_灼骨炎陽()        => null; // 実装中 (until 遊郭編)
  public    object? 伍ノ型_陽華突()          => null; // 実装中 (until 刀鍛冶の里編)
  public    object? 陸ノ型_日暈の龍_頭舞い() => null; // 実装中 (until 刀鍛冶の里編)
  public    object? 漆ノ型_斜陽転身()        => null; // 実装中 (until 無限城編)
  public    object? 㭭ノ型_飛輪陽炎()        => null; // 実装中 (until 無限城編)
  public    object? 玖ノ型_輝輝恩光()        => null; // 実装中 (until 無限城編)
  public    object? 拾ノ型_火車()            => null; // 実装中 (until 遊郭編)
  public    object? 拾壱ノ型_幻日虹()        => null; // 実装中 (until 遊郭編)
  public    object? 拾弐ノ型_炎舞()          => null; // 実装中 (until 遊郭編)
  protected object? 拾参ノ型()               => null; // 実装中 (until 無限城編)
  public    object? 円舞一閃()               => null; // 実装中 (until 刀鍛冶の里編)
}

public class 竈門禰豆子 : 爆血 {
  public object? 爪で引き裂く() { /* ... */ }
  public object? 蹴る()         { /* ... */ }
  public void    鬼化進行()     {}            // 実装中 (until 遊郭編)
  public object? 解毒()         => null;      // 実装中 (until 遊郭編)
  public object? 爆血刀()       => null;      // 実装中 (until 刀鍛冶の里編)
  public void    太陽克服()     {}            // 実装中 (until 刀鍛冶の里編)
}

public class 嘴平伊之助 : 獣の呼吸 {
  public void    捌ノ型_爆裂猛進()      {}       // 実装中 (until 遊郭編)
  public object? 玖ノ牙_伸_うねり裂き() => null; // 実装中 (until 無限城編)
  public object? 拾ノ牙_円転旋牙()      => null; // 実装中 (until 無限城編)
  public object? 思いつきの投げ裂き()   => null; // 実装中 (until 無限城編)
}

public class 我妻善逸 : 雷の呼吸 {
  public IEnumerable<object?> 壱ノ型_霹靂一閃_六連() => Enumerable.Repeat((this as 雷の呼吸).壱ノ型_霹靂一閃(), 6);
  public IEnumerable<object?> 壱ノ型_霹靂一閃_八連() => null!;                               // 実装中 (until 遊郭編)
  public object?              壱ノ型_霹靂一閃_神足() => null;                                // 実装中 (until 遊郭編)
  public object?              弐ノ型_稲魂()          => throw new NotImplementedException(); // 頑張ってください善逸君 一番応援してますよ
  public object?              参ノ型_聚蚊成雷()      => throw new NotImplementedException(); // 頑張ってください善逸君 一番応援してますよ
  public object?              肆ノ型_遠雷()          => throw new NotImplementedException(); // 頑張ってください善逸君 一番応援してますよ
  public object?              伍ノ型_熱界雷()        => throw new NotImplementedException(); // 頑張ってください善逸君 一番応援してますよ
  public object?              陸ノ型_電轟雷轟()      => throw new NotImplementedException(); // 頑張ってください善逸君 一番応援してますよ
  public object?              漆ノ型_火雷神()        => null;                                // 実装中 (until 無限城編)
}

実装中 = 修行により確立
将来予約 = 実戦中に獲得