C# 无法获取抽象类中属性的集合访问器?

C# 无法获取抽象类中属性的集合访问器?,c#,reflection,properties,C#,Reflection,Properties,考虑到班级': 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() 当类为非抽象(实体)时,它同时返回g

考虑到班级':

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方法和set方法, 但是当类是抽象的(AbstractEntity)时,只有get方法


为什么会这样?还有其他方法可以从具有私有集的属性获取set方法吗?

在抽象类中,不能实例化它。除了反思,没有什么可以称之为私人设定者。在反射中,您仍然必须实例化类(不包括静态项)以访问属性、调用方法等,而这不能在抽象类中完成。能够访问它不会给你任何东西,事实上,没有任何东西可以访问它来使用它

如果要获取集合的MethodInfo,可以。正如凯文在回答中指出的那样,这并不意味着你可以实际使用它

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

正如我指出的那样,烤面包是不一样的。仅用于非抽象类。上面的代码将返回2个methodInfo对象,一个用于get,一个用于set。那之后你想用它们做什么?我用一个控制台应用程序测试了这段代码。你是对的,我的错误在别处。谢谢你指出!:-)好吧,这个论点适用于所有的私人成员,但这并不能解释为什么这与摘要有什么不同。我确实不能直接实例化这个类,但这并不能阻止我通过反射来描述它?由于安全问题,我接受不能设置它,但是为什么不能读取它是否存在呢?不,因为在其他私有成员中,当对象被实例化时,它们是存在的。对于私有抽象成员,这是不可能发生的。