Public Class Customer
Private _Name As String
Public Overridable Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
End Class
在vb.net中的一类,并从它
Public Class ProxyCustomer
Inherits Customer
Private _name As String
Public Overrides WriteOnly Property Name() As String
Set(ByVal value As String)
_name = value
End Set
End Property
End Class
一个类派生这给了我下面的错误 公共重写只写属性名称()作为字符串'不能覆盖'公共Overrideable属性名称()作为字符串',因为他们不同'只读'或'只写'
但我有相同的构造在C#
public class Customer
{
public virtual string FirstName { get; set; }
}
公共类CustomerProxy:因为两种语言都非常不一致的行为方式的客户 {
public override string FirstName
{
set
{
base.FirstName = value;
}
}
}
它的工作原理,所以第一件事情就是,这是一致的。
其次,当我做了反射来获取属性,因此,例如
Dim propInfo = GetType(Customer).GetProperty("Name")
的propINfo.canRead属性始终是假的,不应该因为这个基类实现属性的getter是真实的?
非常感谢
但是不应该反映准确反映你是否可以实际从财产中读取或没有? – 2009-09-30 14:58:44
所以基本上你说反射可以说“不,你不能从属性X读取”,实际上你可以?如果您使用反射从属性中读取,会发生什么情况,会不会也会失败?这似乎与我不一致。我明白,反射只是看一些元数据表,但如果可以读取属性,我只是觉得反射应该准确地报告。 – 2009-09-30 15:01:22
不,因为反射查询只检查新的继承属性。它不知道父母的任何事情。这种情况也有助于说明为什么_right_这样做,因为你无法从属性中读取。你可以看到这个,如果你第一次在属性上设置一个新的值。如果你从中读出,你会发现你并不真正从那个属性读取,而是从其他地方读取,因为它没有显示你的改变。 – 2009-09-30 15:02:04