当前位置: 首页 > 编程语言 > C#

有没有一种方法可以将对公共方法的访问限制为C#中的特定类?分享

时间:2023-04-10 13:25:11 C#

有没有一种方法可以将对公共方法的访问限制为C#中的特定类?我在C#中有一个带有公共方法的A类。我只想允许B类访问此方法。是否可以?更新:这是我正在尝试做的事情:publicclassCategory{publicintNumberOfInactiveProducts{get;}publicIListProducts{get;set;}publicvoidProcessInactiveProduct(){//dothings...NumberOfInactiveProducts++;}}publicclassProduct{publicboolInactive{get;}publicCategoryCategory{get;set;}publicvoidSetInactive(){this.Inactive=true;Category.ProcessInactiveProduct();我希望其他程序员这样做:varprod=Repository。获取(编号);prod.SetInactive();我想确保他们不会手动调用ProcessInactiveProduct:varprod=Repository.Get(id);prod.SetInactive();prod.Category.ProcessInactiveProduct();我想允许类别。ProcessInactiveProduct仅访问类Product。其他类不应该能够调用Category.ProcessInactiveProduct。将这两个类放在单独的程序集中,并使该方法成为内部方法。如果你让A类成为B类中的私有嵌套类,你可以:classB{classA{publicInt32Foo{get;放;}}}在此示例中,只有B可以看到A及其成员。或者你可以将B嵌套在A中:classA{Int32Foo{get;放;}publicclassB{}}在这种情况下,每个人都可以看到A和B,但只有B可以看到A.Foo。您可以通过以下方式限制方法/类访问:[StrongNameIdentityPermissionAttribute(SecurityAction.Demand,PublicKey="...hex...",Name="App1",Version="0.0.0.0")]publicclassClass1{}有关详细信息,请查看http//msdn.microsoft.com/en-us/library/c09d4x9t.aspx。托管代码提供了几种方法来限制方法访问:...您的问题没有现成的答案。如果它们已经在同一个程序集中,为什么不将该方法设为内部作用域呢?如果它们在不同的程序集中,您可以使用涵盖所有内部方法的“友元”语法。最好的解决方案可能是限制对特定程序集的公共方法访问。这意味着有人不能只编写一个新程序集并继续调用您的公共方法。鉴于您似乎有一个域模型,看起来您应该允许从其他域对象调用此方法,但可能不允许从业务逻辑调用。这可以通过为域模型DLL分配一个唯一的强名称来实现。您可以限制对公共方法的访问,以允许它仅由满足给定公钥的程序集中的方法调用。请参阅msdnStrongNameIdentityPermission您可以使用观察者类型的模式,其中类别注册对产品上特定事件的兴趣(可能是ProductInactivated事件?),然后适当地处理逻辑。这种基于事件的模式非常普遍,大大降低了耦合度。该类最终对自己的状态负责,并且不依赖于产品知道包含它的内容以保持类的状态完好无损。当事情发生时,产品只是简单地告诉感兴趣的客户。另一种选择是重构您的Category类,使其包含或包含在某些CategoryProductServices对象中,该对象封装了Product需要在其包含的Category上执行的方法。在创建类别和产品的上下文中,将此CategoryProductServices对象的实例而不是完整的类别传递给Product。这种设计使接口保持公开,但会阻止客户端访问服务,因为它们无法检索实例。它还放松了产品与类别类的紧密耦合,将其限制为仅产品必须了解的那些服务。这使得产品对状态负责,但至少限制了它需要知道/做的事情。C#学习教程就是这些:有没有一种方法可以将对公共方法的访问限制为C#中的特定类?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

猜你喜欢