C# 访问程序集范围外的内部属性
我有一个具有内部属性的类:C# 访问程序集范围外的内部属性,c#,oop,language-features,C#,Oop,Language Features,我有一个具有内部属性的类: internal virtual StateEnum EnrolmentState { get { ..getter logic } set { ..setter logic } } public StateEnum GetCurrentState() { return EnrolmentState; } 但是,我希望能够在程序集之外访问此属性,因此我创建了只返回此属性的方法: internal virtual StateEnum En
internal virtual StateEnum EnrolmentState
{
get { ..getter logic }
set { ..setter logic }
}
public StateEnum GetCurrentState()
{
return EnrolmentState;
}
但是,我希望能够在程序集之外访问此属性,因此我创建了只返回此属性的方法:
internal virtual StateEnum EnrolmentState
{
get { ..getter logic }
set { ..setter logic }
}
public StateEnum GetCurrentState()
{
return EnrolmentState;
}
但当我从这个程序集之外的类调用这个方法时,我得到了一个异常
(System.TypeLoadException:程序集'44fe776f-458e-4c5d-aa35-08c55501dd43,版本=1.0.0.0,区域性=中性,PublicKeyToken=null'中类型'EnrolmentAopProxy'上的方法'get_EnrolmentState'正在重写该程序集中不可见的方法。)
<> p>因此,可以以任何方式访问程序集之外的内部成员,或者我应该考虑不同的方法。
只需提到这个类被用作O/R映射器实体(NPersist),它被O/R映射器覆盖以注入持久性代码。这听起来像是你应该重新考虑你的设计选择。内部是用来避免您试图做的事情,所以请考虑使用对属性的某种公共访问。
可以使用InternalsVisibleTo属性使特定程序集能够访问内部属性,但在我看来,这是一个糟糕的设计。为什么属性首先是内部的?如果您想让公众访问,请将其公开。我假设您对此有一定的控制权,否则您首先将无法添加公共方法来访问它 如果您只希望选定的其他程序集能够访问它,
InternalsVisibleTo
是您的朋友(并非有意使用双关语)——但正如Erik所说,此时您应该仔细考虑设计
至于为什么会出现这种特殊错误——看起来您的AOP代理仍在尝试重写内部属性,而不是使用公共方法。在不了解更多有关特定设置的信息的情况下,很难知道您是否可以更改此设置,但将属性公开可能是一个更简单的解决方案。是的,我同意这是一种奇怪的设计。我将使用受保护的修饰符,因为
InternalVisibleTo
属性对我不起作用。这是您的确切代码吗?因为在指定的代码中没有提到EnrolmentState,而是在日志中提到。是的,我只添加了一个示例代码,而实际代码是虚拟内部属性“EnrolmentState”。谢谢你的评论好的,我已经根据这个编辑了我的答案。