我有一个基类表,其中包含我希望在所有派生类中拥有的默认mustoverride属性。
infix operator =? {
associativity none
precedence 130
}
func =? <T>(inout lhs: T?, rhs: Any?) {
lhs = rhs as? T
}
var movie: Movie?
let item: Any? = Movie(name: "some movie")
movie =? item
movie?.name // "some movie"
使用了行基类
Public MustInherit Class TableBase
Default Public MustOverride ReadOnly Property Rows(iID As Integer) As RowBase
End Class
从名为RowX
的rowbase派生的类Public Class RowBase
End Class
从Table base派生的表类TableX。
Public Class RowX
Inherits RowBase
Public Property Name As String
End Class
使用以下方法的测试表:
Public Class TableX
Inherits TableBase
Default Public Overrides ReadOnly Property Rows(iID As Integer) As RowBase
Get
End Get
End Property
End Class
构建这将给我一个消息,名称不是Rowbase的属性。 我不能将tableX中属性Rows的类型更改为RowX,因为它是mustinherit。
解决此问题的最佳方法是什么?
答案 0 :(得分:0)
ValueError: total size of new array must be unchanged
应该是RowX
的属性,因为表格“有一行”。
属性TableX
不应该Name
使其成为public
,并且将getter和setter方法设为private
,因为它违反了封装
现在可以使用public
访问Name
。
因此,您可以将代码修改为:
_tablex._rowx.Name
假设您要将传递的值设置为名称。
对于错误的语法(如果有的话,我是Java开发人员)
抱歉