同様の問題があり、説明しやすいのでコードで表現しようとしました。
基本的に、私は汎用コレクションを持っているので、インスタンス化されたコレクションのタイプに関係なく、いくつかの共通のプロパティとイベントがあります。そして、私はこれらの共通のプロパティに興味があります。
たとえば、ジェネリック コレクションのインスタンス化されたオブジェクトがあるとします。これらのプロパティを取得してイベントをサブスクライブする最良の方法は何ですか? インターフェイスを実装してインターフェイス定義にキャストすることでそれができることは理解していますが、単一の要件を満たすためにそれを行っているだけなので、それは好きではありません。これをリファクタリングするより良い方法はありますか?
public interface IDoNotLikeThisInterfaceDefinitionJustToPleaseGetDetailMethod
{
string Detail { get; }
event Action<bool> MyEvent;
}
public class MyList<T> : List<T>
//, IDoNotLikeThisInterfaceDefinitionJustToPleaseGetDetailMethod
{
public string Detail
{
get;
}
}
class Program
{
static void Main(string[] args)
{
MyList<int> mi = new MyList<int>();
MyList<string> ms = new MyList<string>();
MyList<char> mc = new MyList<char>();
GetDetail(mi);
GetDetail(ms);
GetDetail(mc);
}
//please note that obect need not be mylist<t>
static string DoSomeWork(Object object)
{
//Problem: I know myListObect is generic mylist
//but i dont know which type of collection it is
//and in fact i do not care
//all i want is get the detail information
//what is the best way to solve it
//i know one way to solve is implement an interface and case it to get details
var foo = myListObject as IDoNotLikeThisInterfaceDefinitionJustToPleaseGetDetailMethod;
if (foo != null)
{
//is there another way?
//here i also need to subsribe to the event as well?
return foo.Detail;
}
return null;
}
}