CS.METHOD.NEW

メソッドを非表示するための新しいキーワードの使用を避けます

この規則は、基本クラスでメソッドを非表示にするために、"new" キーワードが使用されるたびにトリガーします。C# では、キーワード "new" を使用することで、基本クラスでメソッドを再定義できます。ただし、基本クラスからメソッドを非表示にするとクラスのユーザーを混乱させる可能性があるため、十分に注意してこれを使用する必要があります。制限事項: 規則は、静的メンバーのメソッドを確認しません。

脆弱性とリスク

クラスのユーザーを混乱させないようにします。

軽減と防止

Bill Wagner による効果的な C# (項目 29) には、これに関する詳細があります。メソッドをオーバーライドするための "new" の使用は、基本クラスが変更し、派生したクラスで既に定義済みのメソッドを導入した状況に制限することを推奨します。

これを修復するには通常、設計について考慮し、可能であればキーワード "new" の使用を回避する必要があります。回避できない場合は、目立つ方法で警告を提示することが役立つ場合があります。

脆弱コード例

コピー
  public class BaseClass
  {
      public int GetSomeValue()
      {
          return 5;
      }
  }
  
  public class DerivedClass : BaseClass
 {
     public new int GetSomeValue() // Violation
     {
         return 8;
     }
     public static void Main()
     {
         BaseClass a = new DerivedClass();
         DerivedClass b = a as DerivedClass;
         // res1 and res2 get different values below.
         // This will surprise programs that cannot see the definition
         // of the classes.They expect both these to return the same value
         // (the situation is worse if these have side effects)
         int res1 = a.GetSomeValue();
         int res2 = b.GetSomeValue();
     }
 }