1

ここに私がやりたいことのプロトタイプがありますが、私が書いたようには機能しないことに気づいています:

using System.Collections.ObjectModel;

namespace Merlinia.CommonClasses
{
   public abstract class JustTesting<TItem> : KeyedCollection<string, TItem>
   {
      protected override string GetKeyForItem(TItem anItem)
      {
         return GetKeyForItem(anItem).ToUpperInvariant();
      }

      protected new abstract string GetKeyForItem(TItem anItem);
   }
}

ここで、派生クラスで必要な抽象メソッドの名前を変更することで、それが機能することに気付きました。

using System.Collections.ObjectModel;

namespace Merlinia.CommonClasses
{
   public abstract class JustTesting<TItem> : KeyedCollection<string, TItem>
   {
      protected override string GetKeyForItem(TItem anItem)
      {
         return NewGetKeyForItem(anItem).ToUpperInvariant();
      }

      protected abstract string NewGetKeyForItem(TItem anItem);
   }
}

すべてのクラスで、メソッド名が同じ GetKeyForItem であることを望みます。それを機能させる方法はありますか?

4

1 に答える 1