c# - 访问程序集范围之外的内部属性

标签 c# oop language-features

我有一个带有内部属性的类:

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”正在覆盖一个该程序集不可见的方法。)

因此可以通过任何方式访问程序集外部的内部成员,或者我应该考虑不同的方法。

只需提及该类用作 O/R 映射器实体 (NPersist),并从 O/R 映射器覆盖以注入(inject)持久性代码。

最佳答案

为什么属性首先是内部的?如果您想公开访问它,请将其公开。我假设您对此有一定的控制权,否则您将无法首先添加公共(public)方法来访问它。

如果您只希望选定的其他程序集能够访问它,InternalsVisibleTo 是您的 friend (双关语不是故意的)——但正如 Erik 所说,您应该在那个时候仔细考虑设计。

至于为什么您会收到该特定错误 - 看起来您的 AOP 代理仍在尝试覆盖内部属性,而不是使用您的公共(public)方法。在不了解您的特定设置的更多信息的情况下,很难知道您是否可以更改它 - 但将属性公开可能是一个更简单的解决方法。

关于c# - 访问程序集范围之外的内部属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/339912/

相关文章:

c# - 保持事件对象的插件系统

c# - 在 C# 中验证文本框输入

c++ - 在 C++ 中设置模拟接口(interface)

c++ - 调用没有对象错误的成员函数: C++/(G++) oop

oop - 一个实体,不同数据库的不同限界上下文中的多个模型

python - Gensim 中的 TFIDIF 模型创建类型错误

C# 自定义组合框 - 下拉位置

c# - 用数组初始化列表

language-features - 物理建模的最佳语言是什么?

parsing - 无论语言设置如何,如何解析带小数的数字