假设您有一个定义如下的类。

public class SomeClass
{
     public Manager m { get; protected set; }
     public SpecialData data { get; protected set; }

     //More methods and member code here...
}

我需要我的经理类,才能以某种方式更改SpecialData成员的设置引用。我可以使用C++中的双指针或 friend 类来完成此操作,但是可悲的是,该选项在C#中不可用。如何保护SpecialData免受外部用户的设置,同时仍然允许Manager类控制设置?我可以使用内部关键字来做到这一点,但这似乎并没有令人难以置信的安全或干净...

任何帮助是极大的赞赏。

最佳答案

如果manager类与SomeClass是同一程序集的一部分,则使其成为internal成员将使同一程序集中的类可以访问setter:

public SpecialData data { get; protected internal set; }

这类似于在C++中使用friend,不同之处在于“友谊”扩展到同一程序集的所有成员。

如果管理器是其他程序包的一部分,则可以在程序集上使用 InternalsVisibleTo 属性。但是,在这种情况下,您应该在扩展了友谊的程序集上签名,以避免尝试从未经授权的代码获得对设置程序的访问。

10-07 16:19
查看更多