2010-05-17 67 views
4

鉴于类:为抽象类中的属性设置访问器,不可能吗?

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

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

而一个的PropertyInfo为属性 'ID'。

当调用方法:

PropertyInfo.GetAccessors() 

它同时返回的get-方法和上课的时候是抽象的设置方法(实体), 但只有得到法上课的时候是抽象的(AbstractEntity)。

这是为什么?是否有另一种方法从私有集合中获取set-method?

回答

2

如果你想获得该设置的MethodInfo,你可以。这并不意味着你可以真正使用它,正如Kevin在他的回答中指出的那样。

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

烘焙不同,因为我指出,不工作。仅适用于非抽象类。 – 2010-05-17 14:08:21

+0

上面的代码将返回2个methodInfo对象,一个用于获取,另一个用于该集合。那之后你想和他们做什么?我用ConsoleApplication测试了这段代码 – anchandra 2010-05-17 15:13:51

+0

你说得对,我的错误在别处。感谢您指出! :-) – 2010-05-17 16:49:42

1

在抽象类中,不能实例化它。除了反思,没有什么可以称为私人二传手。在反射中,你仍然需要实例化类(不包括静态项)来访问属性调用方法等,这不能在抽象类中完成。能够访问它不会给你任何东西,实际上没有任何东西可以访问它来使用它。

+0

那么,这个论点将适用于所有私人成员,但这并不能解释为什么这与摘要有什么不同。 ITs是真的,我不能直接实例化类,但是这不让我不想通过反射来描述它? 由于安全问题,我接受无法设置它,但为什么无法读取它是否存在? – 2010-05-17 14:12:47

+0

那么,不,因为在其他私人成员,当对象被实例化时,它们存在。与私人抽象成员,这是不可能发生的。 – kemiller2002 2010-05-17 16:17:09