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