如果您可以使用反射访问它们,那么拥有私有构造函数有什么意义?

时间:2010-11-15 03:24:26

标签: .net reflection access-modifiers

可能是私有静态方法和属性等。

4 个答案:

答案 0 :(得分:7)

访问修饰符有助于指导程序流程。它们就像交通信号 - 你不必遵守它们,在某些情况下,授权玩家可能会选择忽略它们,但你通常要尊重它们,因为它们使一切运行得更顺畅。

答案 1 :(得分:2)

私有构造函数通常与设计模式(例如Factory Method PatternSingleton Pattern)一起使用,以防止对象被错误地实例化。

如果您不需要访问任何实例变量,那么私有静态方法通常会更快调用(编译器不必检查对象是否为非null)。

答案 2 :(得分:2)

反射被认为是一种比平常更强大的方式来访问你的类 - 建议不对非受控代码拒绝非公开访问 - 请参阅ReflectionPermission

  

没有ReflectionPermission,代码可以   使用反射只访问   公共成员的对象。代码用   ReflectionPermission和   适当的ReflectionPermissionFlag   flags可以访问受保护的和   对象的私人成员。

     

小心

     

因为ReflectionPermission   可以提供对非公共类型的访问   和会员,我们建议你这样做   不授予ReflectionPermission   互联网代码,除了   ReflectionPermissionFlag.RestrictedMemberAccess   旗。 RestrictedMemberAccess允许   访问非公共成员,与   限制授予集的   非公职人员必须等于,   或者是该授权集的子集   访问非公共的代码   成员。

换句话说,如果您允许,人们只访问您的类内部 - 与首先设置访问修饰符相同,对于具有程序集引用的直接客户端。任何成员只有在您看到它时才可见。

答案 3 :(得分:0)

这种行为在Silverlight运行时中是不同的,其中基本上反射只能执行允许编译器(C#或VB)的操作。 因此,在Silverlight中,即使使用Activator.CreateInstance,也无法使用私有构造函数进行实例化。