如何防止引用程序直接访问类? (。净)

时间:2019-06-20 17:16:35

标签: c# .net dll access-levels

我很可能没有正确描述我的头衔,并且完全缺少我要做的事情的用语...因此,如果您正在阅读此书,并且知道我应要求的内容,请分享。< / 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()

我不想要哪个。

1 个答案:

答案 0 :(得分:3)

只需将StoreLogicShopLogic的构造函数标记为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();
    }
}