我误解了继承的一些明显的东西。我创建了一个示例控制台应用程序,它有一些相互继承的接口和类。
使用工厂,我试图根据给定的密钥检索适当的服务。但是编译器说它不能将具体类添加到我要求的通用字典中。
这是我正在尝试做的事情:
给定一个工厂,通过键名获取服务。然后Search
在此服务上执行该方法。
class Program
{
static void Main(string[] args)
{
var animalFactory = new AnimalFactory();
// Search for some fishes.
var fishService = animalFactory.GetAnimalService("fish");
var fishes = fishService.SearchForAnimals(new FishSearchOptions {ScalesType = "shiny green"});
// Search for meows.
var catService = animalFactory.GetAnimalService("cat");
var kittyCats = catService.SearchForAnimals(new MamalSearchOptions {HairColour = "golden"});
}
}
到目前为止,一切都很好?请注意,每个服务都可以接受它自己的特定搜索类作为输入参数。例如。aMamalService
只能接受一个MamalSearchOptions
类。
这里是工厂...
public class AnimalFactory
{
private IDictionary<string, IAnimalService<IAnimal, IAnimalSearchOptions>> _animals;
public AnimalFactory()
{
_animals = new Dictionary<string, IAnimalService<IAnimal, IAnimalSearchOptions>>
{
{"Cat", new MamalService() },
{"Dog", new MamalService() },
{"GoldFish", new FishService() }
};
}
public IAnimalService<IAnimal, IAnimalSearchOptions> GetAnimalService(string name)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentNullException("name");
}
return _animals[name];
}
}
这是错误消息:
它不喜欢我尝试将服务插入(通用?)字典的方式。
现在,其他类和接口是什么样的?可以在这个要点中找到它们,而不是向这个线程发送垃圾邮件,这里。<-- 完整的 100% 回购。
有人可以解释我做错了什么并建议我需要正确做什么吗?我一直认为,如果超类继承自泛型集合的 Type,那么它们总是可以插入到泛型集合中。