我有两个类这样的代码(这只是示例)
class parent1
function f(param as integer) as integer
return param +2
end function
end class
'===============================
class parent2
function f(param as integer) as integer
return param *1
end function
end class
然后我想根据运行时的情况创建一个继承引导的类。也许是这样的:
class child
sub new(s as string)
'it will inherits parent1
end sub
sub new(i as integer)
'it will inherits parent2
end sub
end class
有可能......?
答案 0 :(得分:2)
.NET语言不支持多继承,并且您无法在运行时更改它,如您收到的所有评论中所指出的那样 相反,为这个名为Interface的问题创建了很好的“解决方法”。有人称之为“黑客”解决方案:)
对我来说,你的问题是依赖注入的问题。
您希望拥有child
类,它可以在运行时更改行为
创建您想要更改的行为抽象,作为接口
Public Interface IBehavior
Function Calculate(value As Integer) As Integer
End Interface
然后创建child
类,它将行为作为构造函数参数
Public Class Child
Private ReadOnly _behavior As IBehavior
Public Sub New(behavior As IBehavior)
_behavior = behavior
End Sub
Public Sub Execute(int value)
Dim newValue As Integer = _behavior.Calculate(value)
' Do something else
End Sub
End Class
创建要在运行时使用的IBehavior
的实现
Public Class SumBehavior Implements IBehavior
Function Calculate(value As Integer) As Integer Implements IBehavior.Calculate
Return value + 2
End Function
End Class
Public Class MultiplyBehavior Implements IBehavior
Function Calculate(value As Integer) As Integer Implements IBehavior.Calculate
Return value * 2
End Function
End Class
然后在运行时,您可以根据传递的参数
更改Child
实例的行为
Dim sum As New SumBehavior()
Dim child As New Child(sum)
child.Execute(23)
你的问题是“开放式原则”的好例子
- 您的Child
课程因修改而关闭 - > Do something else
方法的Execute
名工作人员未经修改
- 您的child
课程已开放进行修改 - > Behavior
逻辑可以在不触及Child
类
答案 1 :(得分:0)
.Net中无法进行多重继承。现在,解决你的问题
CodeDom
动态创建类。请参阅msdn link interfaces
和dependency injection
。 (由于类parent1
和parent2
中的函数名称相同,因此您可以利用polymorphism
)。