【问题标题】:Getting set accessor for property in abstract class, not possible?在抽象类中获取属性的设置访问器,不可能?
【发布时间】:2011-02-20 09:56:17
【问题描述】:

给定班级':

public abstract class AbstractEntity
{
    public virtual Guid Id { get; private set; }
}

public class Entity
{
    public virtual Guid Id { get; private set; }
}

以及属性“Id”的 PropertyInfo。

调用方法时:

PropertyInfo.GetAccessors()

当类是抽象(实体)时,它同时返回get-method和set-method, 但只有当类是抽象的(AbstractEntity)时的get方法。

这是为什么?还有其他方法可以从具有私有集合的属性中获取集合方法吗?

【问题讨论】:

    标签: c# reflection properties


    【解决方案1】:

    如果您想获取该集合的 MethodInfo,您可以。这并不意味着您可以实际使用它,正如 Kevin 在他的回答中指出的那样。

    Type t = typeof(AbstractEntity);
    MethodInfo[] mi = t.GetProperty("Id").GetAccessors(true);
    

    【讨论】:

    • 不同的烘焙,正如我指出的那样,它不起作用。仅适用于非抽象类。
    • 上面的代码将返回2个methodInfo对象,一个用于get,一个用于set。之后你想对他们做什么?我用 ConsoleApplication 测试了这段代码
    • 你说得对,我的错误在别处。感谢您指出! :-)
    【解决方案2】:

    在抽象类中,您不能实例化它。除非进行反思,否则没有什么可以调用私有 setter。在反射中,您仍然必须实例化类(不包括静态项)才能访问属性调用方法等,而这不能在抽象类中完成。能够访问它不会授予您任何东西,实际上没有任何东西可以访问它来使用它。

    【讨论】:

    • 嗯,这个论点适用于所有私有成员,但这并不能解释为什么这对于摘要有任何不同。确实,我不能直接实例化该类,但这并不能阻止我想通过反射来描述它?由于安全问题,我接受无法设置它,但为什么无法读取是否存在?
    • 嗯,不,因为在其他私有成员中,当对象被实例化时,它们存在。使用私有抽象成员,这永远不会发生。
    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2012-08-06
    • 2023-03-03
    • 2013-09-18
    • 2020-08-31
    • 2012-03-11
    相关资源
    最近更新 更多