【发布时间】:2014-05-02 08:07:23
【问题描述】:
我有 3 个项目:基础项目、中间项目和客户项目。客户访问基础项目通过中间一。我在这里简化了我的问题。我有 3 个项目的解决方案:
// Animals project
public class FarmAnimal
{
public string GetFood { get; protected set; }
}
public class Cow : FarmAnimal
{
public Cow()
{
GetFood = "Milk";
}
}
public class Chicken : FarmAnimal
{
public Chicken()
{
GetFood = "Egg";
}
}
// Farmer project
public class AbstractFarmer<TAnimal> where TAnimal : FarmAnimal, new()
{
protected TAnimal animal = new TAnimal();
public string GetProduct()
{
return animal.GetFood;
}
}
public class CowFarmer: AbstractFarmer<Cow>
{
}
public class ChickenFarmer : AbstractFarmer<Chicken>
{
}
// Client project
class Program
{
static void Main(string[] args)
{
var cowFarmer = new CowFarmer();
Console.WriteLine(cowFarmer.GetProduct());
}
}
如果客户端项目没有添加对动物的引用,那么它会给出:
错误 1 类型“Animals.FarmAnimal”在未引用的程序集中定义。您必须添加对程序集“Animals, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”的引用。
封装原则说客户端不应该知道“Animals”,只知道中间体(“Farmers”)。
我该如何解决这个问题,为什么会出现?
【问题讨论】:
-
"封装原理说客户端不应该知道“动物””——那你为什么要在你的
Farmer项目中打破这个“封装”并暴露Cow和@987654325 @ 类型作为定义CowFarmer和ChickenFarmer类的一部分?
标签: c# .net visual-studio dll