我很可能没有正确描述我的头衔,并且完全缺少我要做的事情的用语...因此,如果您正在阅读此书,并且知道我应要求的内容,请分享。< / p>
这是我的问题。我正在创建一个DLL。当然,此DLL中将包含几个类。调用解决方案将需要访问这些类及其各种方法。
但是,我想强制调用程序仅创建“ Parent \ Root”类的实例,因为无论何时他们要使用该类的任何内容,我都需要某些信息(比如某种许可证)关键但不是真的)。
所以从“客户端”视图来看。我希望它像这样工作。
FooDll.Client myFooClient = new FooDLL.Client(myLicensesKey)
myFooClient.Store.PlaceOrder()
myFooClient.Shop.FixWidget()
现在从我的DLL方面,我正在考虑这样的事情...
public class Client
{
public StoreLogic Store {get;} //This is a internal Class that contains the method PlaceHolder
public ShopLogic Shop {get;} //This is an internal Class that contains the method FixWidget
public Client(string LicenseKey)
{
set some internal global flags for the entire library
}
}
现在,只要将StoreLogic和ShopLogic类声明为“ Public”,就可以执行此操作。但是如果我这样做了,客户现在就可以这样做...
FooDll.StoreLogic myStore = new FooDLL.StoreLogic()
我不想要哪个。
答案 0 :(得分:3)
只需将StoreLogic
和ShopLogic
的构造函数标记为internal
。
这样做,只有同一程序集中包含的类才能实例化它们,例如Client
类。
public class StoreLogic
{
internal StoreLogic()
{}
public void PlaceOrder() {}
}
public class ShopLogic
{
internal ShopLogic()
{}
public void FixWidget() { }
}
public class Client
{
public StoreLogic Store { get; }
public ShopLogic Shop { get; }
public Client(string LicenseKey)
{
this.Shop = new ShopLogic();
this.Store = new StoreLogic();
}
}