以下は fm.AddFoo(new StringFoo()); 行でコンパイルされません。エラーメッセージとともに:
引数 1: 'ClassLibrary2.StringFoo' から 'ClassLibrary2.IFoo' に変換できません
文字列はオブジェクトから継承されるため、これは私には論理的に思えます。
public interface IFoo<T>
{
void Handle(T value);
}
public class StringFoo : IFoo<string>
{
public void Handle(string value)
{ }
}
public class ObjectFoo : IFoo<object>
{
public void Handle(object value)
{ }
}
public class FooManager
{
private readonly List<IFoo<object>> _foos;
public FooManager()
{
_foos = new List<IFoo<object>>();
}
public void AddFoo(IFoo<object> foo)
{
_foos.Add(foo);
}
}
public class Bad
{
public Bad()
{
var fm = new FooManager();
fm.AddFoo(new StringFoo()); \\ This does not compile
}
}
ありがとう