Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问程序集范围外的内部属性_C#_Oop_Language Features - Fatal编程技术网

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”。谢谢你的评论好的,我已经根据这个编辑了我的答案。